代码之家  ›  专栏  ›  技术社区  ›  Russell Steen

LINQ格式之间的转换

  •  2
  • Russell Steen  · 技术社区  · 15 年前

    有人知道怎么写这个吗

    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 回复  |  直到 15 年前
        1
  •  3
  •   dahlbyk    15 年前

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

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

    customers.Join(orders, c => c.Key, o => o.Key, (c, o) => new { c.Name, o.OrderNumber });
    
        2
  •  2
  •   Reed Copsey    15 年前

    这只需要打一个电话就可以了 Enumerable.Join :

    var q = customers.Join(
                    orders, 
                    c => c.Key, 
                    o => o.Key, 
                    (c, o) => new {c.Name, o.OrderNumber}
                 );
    
        3
  •  2
  •   sirrocco    15 年前

    你也可以去看看 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
         }
    )