在LINQ格式之间进行转换

时间:2009-10-16 18:37:57

标签: c# linq

有谁知道怎么写这个

var q = from c in customers
        join o in orders on c.Key equals o.Key
        select new {c.Name, o.OrderNumber};

在这种语法风格中?

var 1= customers.
    .join(???)
    .select(???)

我一直在谷歌搜索一种方法,现在运气好了几天。每个人都喜欢教程的第一个语法,但我发现第二个更容易确定阅读时的操作顺序。

3 个答案:

答案 0 :(得分:3)

编译器转换过程涉及使用“透明标识符”,使当前客户和订单可用于Select方法。您可以通过制作自己的:

来模仿
customers.Join(orders, c => c.Key, o => o.Key, (c, o) => new { c, o })
         .Select(x => new { x.c.Name, x.o.OrderNumber });

相反,您可以将Name / OrderNumber投影移动到Join调用中:

customers.Join(orders, c => c.Key, o => o.Key, (c, o) => new { c.Name, o.OrderNumber });

答案 1 :(得分:2)

这只需拨打一次Enumerable.Join

var q = customers.Join(
                orders, 
                c => c.Key, 
                o => o.Key, 
                (c, o) => new {c.Name, o.OrderNumber}
             );

答案 2 :(得分:2)

您也可以查看LinqPad。它有一个用于屏幕下半部分的小lambda按钮,它将linq查询转换为链式方法:

from p in PropertyListings
from rl in p.ResidentialListings 
select new {p.YearBuilt,p.ListingUrl}

被翻译成:

PropertyListings
.SelectMany (
  p => p.ResidentialListings, 
  (p, rl) => 
     new  
     {
        YearBuilt = p.YearBuilt, 
        ListingUrl = p.ListingUrl
     }
)