在linq语句中输出变量

时间:2010-08-13 12:56:05

标签: c# linq

我可以通过弄乱我的代码库的其他部分来解决这个问题,但我想我会问是否有更简单的方法来做到这一点。

我有以下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语句中巧妙地调用这个方法来填充这两个字段吗?

提前致谢。

2 个答案:

答案 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,
}

没有编译,所以可能会有错误..