如何使用点表示法进行LINQ交叉连接

时间:2013-04-24 04:14:44

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

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

    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#编译器无形地将交叉连接查询表示法转换为点表示法时,该点符号是什么样的?

3 个答案:

答案 0 :(得分:1)

我认为它

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

看起来应该是这样的:

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