如何转换LINQ查询以使用lambda表达式

时间:2012-02-08 11:43:40

标签: c# linq entity-framework lambda

我正在尝试将此linq代码切换为lambda表达式:

foreach (var id in orderLinesToSplit)
{
    int result =
        (from ol in orderLines
        from splittedOl in orderLines
        where ol.Key == id
            && ol.Value == splittedOl.Value
            && ol.Key != splittedOl.Key
        select splittedOl.Key).FirstOrDefault();
}

目标是获得Dictionary<int, int>id(来自oderLinesToSplit)和result(来自linq查询的结果)。可以只使用一个lambda表达式吗?

由于

1 个答案:

答案 0 :(得分:1)

var result= 
(
    from ol in orderLines
    from splittedOl in orderLines
    where orderLinesToSplit.Contains(ol.Key)
        && ol.Value == splittedOl.Value
        && ol.Key != splittedOl.Key
      select new
      {
        splittedOl.Key,
        splittedOl.Value
      }
    ).ToDictionary (v =>v.Key,v=>v.Value);

或者如果你真的想要它在一个表达式中。然后是这样的事情:

var result=
    (
        db.orderLines.Join
            (
                db.splittedOl,
                ol=>ol.Value,
                splittedOl=>splittedOl.Value,
                (ol,splittedOl)=>new 
                {
                    olKey=ol.Key,
                    splittedOlKey=splittedOl.Key
                }
            ).Where(l =>l.olKey!= l.splittedOlKey && orderLinesToSplit.Contains(l.olKey))
            .ToDictionary(l =>l.olKey,v=>v.splittedOlKey)
    );

其中db是linq数据上下文