【问题标题】:How to do LINQ Cross Join With Dot Notation如何使用点表示法进行 LINQ 交叉连接
【发布时间】:2013-04-24 04:14:44
【问题描述】:

我知道如何用点表示法编写查询表示法连接,但是如何用点表示法编写交叉连接?

    List<Alpha> als = new List<Alpha>{new Alpha(), new Alpha()};
    List<Bravo> bros = new List<Bravo>{new Bravo(), new Bravo()};

    //so far so good.
    var res = from a in als
              from b in bros
              select new { A = a, B = b };

    var what = res.ToArray();

    //hmmmm.  Not so sure.
    var result = als.Join(bros, null, null, (x, y) => new { X = x, Y = y });

问这个问题的另一种方式:当 C# 编译器无形地将交叉连接查询表示法转换为点表示法时,那个点表示法是什么样的?

【问题讨论】:

  • 这将有助于了解如何将查询语法转换为“点符号”。一旦你明白了,那么这应该是小菜一碟了。

标签: c# linq syntax linq-to-objects


【解决方案1】:

我认为是

als.SelectMany(x => bros, (a, b) => new {A = a, B = b});

【讨论】:

    【解决方案2】:
     als.SelectMany(a => bros.Select(b =>  new {A = a, B = b}));
    

    【讨论】:

      【解决方案3】:

      它应该看起来像这样:

      var res = als.Join(bros,
          alsItem => alsItem.IdToJoin,
          brosItem => brosItem.OtherId,
          (alsItem, brosItem) => {X = alsItem, Y = brosItem});
      

      【讨论】:

      • 这将是一个内部连接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2012-05-22
      • 2019-04-18
      • 1970-01-01
      • 2017-01-26
      • 2014-03-17
      相关资源
      最近更新 更多