如何将linq表达式转换为lambda表达式?

时间:2014-03-13 09:11:56

标签: c# linq lambda

我有以下表达式:

_callPairs = (from req in _requests
                      join resp in _responses
                          on req.RequestId equals resp.RequestId
                          where !string.IsNullOrEmpty(req.RequestId)
                      select new CallPair(req, resp)).ToList();

我想改成lambda。我试过了:

_callPairs = _requests.Where(req => (_responses.Where(res => res.RequestId == 
    req.RequestId)).Where(!string.IsNullOrEmpty(req.RequestId)).ToList();

不幸的是,这不会编译。

有人可以向我解释我如何将带有连接的linq表达式转换为lambda表达式吗?

2 个答案:

答案 0 :(得分:3)

只需使用Join()方法:

_callPairs = _requests.Where(req => !string.IsNullOrEmpty(req.RequestId))
                      .Join(_responses, 
                            req => req.RequestId,
                            resp => resp.RequestId,
                            (req, resp) => new CallPair(req, resp)).ToList();

答案 1 :(得分:2)

这取决于联接的类型。这里有一个内连接(你可以通过缺少into子句来判断),因此相应的扩展方法语法正在使用Join

_callPairs = _requests
                 .Where(req => !string.IsNullOrEmpty(req.RequestId))
                 .Join(_responses,                 // join to what?
                       req => req.RequestId,       // compare this from requests
                       resp => resp.RequestId,     // to this key from responses
                       (req, resp) => new CallPair(req, resp)) // create result
                 .ToList();

对于群组联接(join ... on ... into ...),您可以使用GroupJoin代替。