C#-LINQ-扩展方法

时间:2009-12-13 10:21:34

标签: c# linq

以下LINQ的扩展方法是什么?

var qry = from a in context.A_Collections
          from b in context.B_Collections
          where a.PK == b.PK
          select 
        new {
              A_key = a.PK, 
              A_Value = a.Value,
              B_Key = b.PK,
              B_value = b.value
            };

我的意思是

(不完全的)

var query = context.A_Collections.
                Where(
                      a => a.PK == context.B_Collections.Select(b => b.PK)).
                    Select(
                            x => new { 
                                      A_key = a.Pk,
                                      A_Value = a.Value,
                                      B_Key = b.PK,
                                      B_value = b.value
                                     }
                           );

4 个答案:

答案 0 :(得分:5)

后续“from”子句转换为SelectMany次来电:

var qry = context.A_Collections
                 .SelectMany(a => context.B_Collections,
                             (a, b) => new { a, b })
                 .Where(x => x.a.PK == x.b.PK)
                 .Select(x => new { A_key = x.a.PK,
                                    A_value = x.a.Value,
                                    B_key = x.b.PK,
                                    B_value = x.b.Value });

“x”位是由于引入了透明标识符

请注意,调用Join可能比使用SelectMany更有效(具体取决于具体情况),但这是您开始使用的查询的更直接的翻译。

答案 1 :(得分:2)

看起来你正在尝试加入,所以它会是:

var query = context.A_Collections.Join(
 context.B_Collections,
 a => a.PK,
 b => b.PK,
 (a, b) => new {
  A_key = a.PK,
  A_value = a.Value,
  B_Key = b.PK,
  B_value = b.value
 });

编辑:正如Jon Skeet指出的那样,编译器完成的实际翻译将使用SelectMany,尽管使用group可能会更有效。

答案 2 :(得分:0)

这将是:

context.A_Collections.Include("B")
.Where(a => a.PK == a.B.PK)
.Select(a => 
     new {A_key = a.PK, 
          A_Value = a.Value, 
          B_Key = a.B.PK, 
          b_value = a.B.value } );

答案 3 :(得分:0)

尝试使用Resharper,如果您愿意,可以帮助您转换Linq方法中的所有Linq查询。