我可以使用LINQ执行外连接吗?

时间:2011-12-01 15:49:06

标签: c# linq

我有两个类,其中city2的key2链接到实用程序的键1。数据不存储在SQL表中,因此我无法链接并获得SQL所需的内容。

public class Town {
    key1 string { get; set; }
    key2 string { get; set; }
    name string { get; set; }
}

public class Utility {
    key1 string { get; set; }
    key2 string { get; set; }
   name string { get; set; }
}

数据如下所示

Town
-------
key1             key2         name
0                 1               Liverpool
0                 2               Preston
0                 3               Wigan

Utility
------

key1      key2
1           West 2
1           West 3
3           East 1
3           East 2

我想要做的是创建一个报告,其中显示所有城镇的列表,其中包含一个辅助列,以显示每个城镇拥有的实用程序数量。

报告看起来像这样

Liverpool  2
Preston    0
Wigan      2

无法从公用事业信息中获取数据,因为我需要显示城镇没有公用设施的地方。我是什么 想到的是一些代码在城镇中迭代,然后为每个城镇做了检查并计算了数字 实用程序行。

如果数据存储在以下集合中:

ICollection<Town> Towns
ICollection<Utility> Utilities

那么是否有某种LINQ查询以某种方式将这些集合以与SQL中的外连接类似的方式连接起来?

2 个答案:

答案 0 :(得分:4)

结帐Microsoft's 101 LINQ Samples。它提供了很好的连接示例。如果没有它,我不知道LINQ是怎么做的。

答案 1 :(得分:3)

这样可行,而且最简单:

var results = Towns.Select(t => new { 
                       Town = t,
                       Utilities = Utilities.Count(u => t.key2 == u.key1)
              })
              .ToList();