我曾经问过一个类似的问题,旨在了解如何在另一组中获得与我持有的模型具有相同属性的模型。
现在的问题是: 那么,实际上将我引导到另一组的“相似属性”的名称是什么。
原帖是: C# LINQ to Entities query for the intersection of two different properties
我有 3 个模型命名为:
- 具有 Pencil.Id(int) 和 Pencil.Colors(IEnumerable) 属性的铅笔
- 具有 Pen.Id(int) 和 Pen.Colors(IEnumerable) 属性的 Pen
- 具有 ID 和名称的颜色。
颜色模型是 IEnumerable,所以它有不止一种颜色。例如;钢笔有 15 种不同的颜色,而铅笔有 25 种不同的颜色。如果我所持笔的其中一种颜色在该铅笔的调色板中也可用,我想带上相应的铅笔。
Raphael 的绝妙解决方案是 https://stackoverflow.com/a/11722191/1062284
int id = id_of_the_pen_that_i_am_holding;
Pen p = db.Pens.Find(id);
var penColorIds = p.Color.Select(m => m.Id).ToList();
var list = db.Pencils.Where(pencil => pencil.Color.Any(color => penColorIds.Contains(color.Id));
所以没关系,工作起来很有魅力,但是学习常见颜色的名称怎么样? 我们得到了其他具有相同颜色的属性,但那个颜色是什么?
如果有人可以生成此 LINQ 查询,我将不胜感激。我是 LINQ 的新手,非常感谢任何帮助。
最佳答案
您可以使用 Intersect
使用 SelectMany
减少颜色的扩展扩展名。
var commonColors =
db.Pens.SelectMany(p => p.Colors)
.Insersect(db.Pencils.SelectMany(hb => hb.Colors));
因为 Intersct
可能返回一个序列,而不是一个集合,(我没有检查过)你可以像这样删除重复项
var commonColors =
db.Pens.SelectMany(p => p.Colors).Distinct()
.Insersect(db.Pencils.SelcectMany(hb => hb.Colors).Distinct());
只需要一支Pen
就可以
Pen p = db.Pens.Find(id);
var commonColors = Pen.Colors
.Insersect(db.Pencils.SelcectMany(p => p.Colors));
关于C# LINQ to Entities-对象和对象集合交集的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760499/