作者fo40225 (靖)
標題Re: [問題] 有沒有辦法在linq查詢語句裡做一些事情
時間Wed Oct 28 00:50:31 2015
※ 引述《bantime (景)》之銘言:
: 想請問有沒有其他方式可以讓我在查詢語句中處理一些事情呢?
這裡我假設你是用LINQ to Objects
不是其他的 LINQ to SQL 或 LINQ to XML 或 LINQ to entities
如果真的很不想另外寫委派 可以使用類似JavaScript IIFE的寫法
範例如下
internal class Program
{
private static void Main(
string[] args)
{
((
Action)(() =>
{
Console.WriteLine(
"IIFE");
}))();
string outer =
"outside";
((
Action<
string>)(inner =>
{
Console.WriteLine(inner);
}))(outer);
int one = ((
Func<
int>)(() =>
{
return 1;
}))();
int o = 5;
int square = ((
Func<
int,
int>)(i =>
{
return i * i;
}))(o);
}
}
要注意的是
如果要在lambda方法本體內直接存取外面的變數
最好搞懂閉包(closure)的觀念
(一句話解釋 你使用到的變數等於從外面用ref傳入lambda中 不了解的情況下不要使用)
所以你的LINQ查詢變成
var q =
from tar in aPlayerData.m_QuestDatas.Values
let questXml = _QUEST_.GetData(tar.uXID)
from data in RefreshQuestDatas
where questXml.AccomplishType == data.m_eUpdateType
select ((Func<rType, dataType, rType>)((a, b) =>
{
a.nTarNum1 += b.m_nUpdateNum;
return a;
}))(r, data);
q.ToList();
如果要做的事情太複雜 建議還是額外寫比較好懂
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.203.135
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1445964635.A.14B.html
1F:推 frank6780: 推 10/29 03:07