【发布时间】:2014-01-27 22:55:24
【问题描述】:
我有三个 MyObject 类型的列表 A、B 和 C。我需要根据一个公共 Key 获取 A、B 和 C 之间的交集列表:
public class MyObject
{
public MyObject(string key)
{
Key = key;
}
public string Key { get; set; }
}
var listA = new List<MyObject>
{
new MyObject("1"),
new MyObject("2")
};
var listB = new List<MyObject>
{
new MyObject("1"),
new MyObject("2"),
new MyObject("3")
};
var listC = new List<MyObject>
{
new MyObject("1"),
new MyObject("2"),
new MyObject("3")
};
var query = (from b in listB
join c in listC on b.Key equals c.Key
join a in listA on c.Key equals a.Key
select new { a, b, c}
);
var result = query.ToList();
这很好,它返回一个像这样的列表:
[0]: {a.Key = 1, b.Key = 1, c.Key = 1}
[1]: {a.Key = 2, b.Key = 2, c.Key = 2}
现在,我需要的是 b 和 c 之间的交集,但包括不匹配 a 的空值:
[0]: {a.Key = 1, b.Key = 1, c.Key = 1}
[1]: {a.Key = 2, b.Key = 2, c.Key = 2}
[2]: {null, b.Key = 3, c.Key = 3}
我不想包含空 b 或 c。只有空的。我尝试使用DefaultIfEmpty() 扩展方法像左外连接一样进行操作,但没有成功。关于如何修改上面的查询以获得预期结果的任何建议?
谢谢,
【问题讨论】: