Re: [問題] 有沒有辦法在linq查詢語句裡做一些事情

看板C_Sharp (C#)作者 (靖)時間9年前 (2015/10/28 00:50), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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://www.ptt.cc/bbs/C_Sharp/M.1445964635.A.14B.html

10/29 03:07, , 1F
10/29 03:07, 1F
文章代碼(AID): #1MBwjR5B (C_Sharp)
文章代碼(AID): #1MBwjR5B (C_Sharp)