我可以通过弄乱我的代码库的其他部分来解决这个问题,但我想我会问是否有更简单的方法来做到这一点。
我有以下linq查询。
(select a in objectA
where a.type = 1
select new
{
Id = a.Id,
Field2 = <needThisValue>
Field3 = <needThisValue>
}).ToList();
现在需要通过接受a的方法的变量提供两个“needThisValues”,例如
TestMethod(object a, out string stringA, out string StringB)
那么无论如何我可以在linq语句中巧妙地调用这个方法来填充这两个字段吗?
提前致谢。
答案 0 :(得分:5)
我认为您不能在查询表达式中执行此操作,但您可以使用块lambda语句执行此操作:
var query = objectA.Where(a => a.type == 1)
.Select(a => {
string Field2;
string Field3;
TestMethod(a, out Field2, out Field3);
return new {
a.Id, Field2, Field3
};
});
.ToList();
我认为我个人更喜欢使用返回元组的方法,然后使用该方法,但上述方法应该有效。
答案 1 :(得分:1)
您可以创建一个返回元组并使用它的私有方法。
有些事情:
private Tuple<string,string> TestMethodInternal(object a)
{
string stringA;
string stringB;
TestMethod(a, out stringA, out stringB);
return Tuple.Create(stringA, stringB);
}
然后你可以在这样的let语句中使用它:
...
where a.type = 1
let t = TestMethodInternal(a)
select new
{
Id = a.Id,
Field2 = t.Item1,
Field3 = t.Item2,
}
没有编译,所以可能会有错误..