属性上的C#Linq并集
我有两个linq查询,我想在一个公共属性上联合它们:属性上的C#Linq并集,c#,linq,C#,Linq,我有两个linq查询,我想在一个公共属性上联合它们: One { Id, Name, Color } Two { Color, Cost } 我想通过在颜色上联合得到一和二的联合?如果没有颜色对应于1的2,我想在输出中将Cost设置为0?在LINQ中如何执行此操作?这称为连接,而不是联合。 请参阅。这称为连接,而不是联合。 请参阅。您希望a保留出现在第一个列表中但不在第二个列表中的值。您希望a保留出现在第一个列表中但不在第二个列表中的值。以下
One
{
Id,
Name,
Color
}
Two
{
Color,
Cost
}
我想通过在颜色上联合得到一和二的联合?如果没有颜色对应于1的2,我想在输出中将Cost设置为0?在LINQ中如何执行此操作?这称为连接,而不是联合。请参阅。这称为连接,而不是联合。
请参阅。您希望a保留出现在第一个列表中但不在第二个列表中的值。您希望a保留出现在第一个列表中但不在第二个列表中的值。以下是一个使用匿名类型的示例,介绍如何执行左外联接:
var products = new[] {
new { Id = 1, Name = "Alpha", Color = "Red" },
new { Id = 2, Name = "Beta", Color = "Green" },
new { Id = 3, Name = "Gamma", Color = "Blue" }
};
var costs = new[] {
new { Color = "Red", Cost = 100 },
new { Color = "Blue", Cost = 200 },
new { Color = "Blue", Cost = 300 }
};
var query = products
.GroupJoin(
costs, p => p.Color, c => c.Color,
(p, c) => new { p.Id, p.Name, p.Color, Costs = c.DefaultIfEmpty() }
)
.SelectMany(
gj => gj.Costs,
(gj, c) => new { gj.Id, gj.Name, gj.Color, Cost = c == null ? 0 : c.Cost }
);
查询结果:
Id Name Color Cost
-------------------
1 Alpha Red 100
2 Beta Green 0
3 Gamma Blue 200
3 Gamma Blue 300
下面是一个使用匿名类型的示例,介绍如何执行左外部联接:
var products = new[] {
new { Id = 1, Name = "Alpha", Color = "Red" },
new { Id = 2, Name = "Beta", Color = "Green" },
new { Id = 3, Name = "Gamma", Color = "Blue" }
};
var costs = new[] {
new { Color = "Red", Cost = 100 },
new { Color = "Blue", Cost = 200 },
new { Color = "Blue", Cost = 300 }
};
var query = products
.GroupJoin(
costs, p => p.Color, c => c.Color,
(p, c) => new { p.Id, p.Name, p.Color, Costs = c.DefaultIfEmpty() }
)
.SelectMany(
gj => gj.Costs,
(gj, c) => new { gj.Id, gj.Name, gj.Color, Cost = c == null ? 0 : c.Cost }
);
查询结果:
Id Name Color Cost
-------------------
1 Alpha Red 100
2 Beta Green 0
3 Gamma Blue 200
3 Gamma Blue 300
顺便说一下,这是一个属性,不是属性。顺便说一下,这是一个属性,不是属性。