作者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/cn.aspx?n=bbs/C_Sharp/M.1445964635.A.14B.html
1F:推 frank6780: 推 10/29 03:07