C#LINQ到实体-对象和对象集合相交处的属性
我曾经问过一个类似的问题,目的是了解如何获得另一组与我持有的模型具有相同属性的模型 现在的问题是: 那么,实际上引导我进入另一组的“相似属性”的名称是什么 原来的职位是: 我有3个模型,分别命名为:C#LINQ到实体-对象和对象集合相交处的属性,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我曾经问过一个类似的问题,目的是了解如何获得另一组与我持有的模型具有相同属性的模型 现在的问题是: 那么,实际上引导我进入另一组的“相似属性”的名称是什么 原来的职位是: 我有3个模型,分别命名为: 具有Pencil.Id(int)和Pencil.Color(IEnumerable)属性的铅笔 具有Pen.Id(int)和Pen.Colors(IEnumerable)属性的笔 具有Id和名称的颜色 颜色模型是IEnumerable,因此它有多个颜色。例如这支钢笔有15种不同的颜色,铅笔有25种
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
do
Pen p = db.Pens.Find(id);
var commonColors = Pen.Colors
.Insersect(db.Pencils.SelcectMany(p => p.Colors));
如果您手里拿着多支笔,请使用(在变量
笔中)
否则,如果您只有一支笔(在变量pen
中)
嗯,不确定在一个查询中获取所有内容是否有意义,但是,通过这个查询,您应该可以获得一个匿名铅笔对象列表和每支铅笔的常见颜色列表(未测试)
很好,但我正在寻找钢笔(我拿着)的普通颜色和其他铅笔的交叉点。因此,钢笔只是一个物体,铅笔是一个收藏品。这种情况也适用吗?var commonColors=db.Pencils.SelectMany(p=>p.Colors.Distinct().insertest(Pen.Colors.Distinct());不起作用:(尊重拉斐尔。这真的很棒。你又一次做到了。我认为这是2的组合的最佳解决方案,但鲍勃的答案也起作用了,他是第一个回答的人。我希望你能理解。@Gorki先生,没问题,这是正确的方法,没什么好理解的;)它给出了两个问题和非常需要的组合的解决方案。但你是对的,第一个答案是你的,回答了问题的所有要求。再次感谢你。
Pen p = db.Pens.Find(id);
var commonColors = Pen.Colors
.Insersect(db.Pencils.SelcectMany(p => p.Colors));
var colors = pens.SelectMany(p=>p.Colors).Distinct();
var commonColors = db.Pencils.SelectMany (p => p.Colors.Where(c=>colors.Contains(c))).Distinct()
var colors = pen.Colors;
var commonColors = db.Pencils.SelectMany (p => p.Colors.Where(c=>colors.Contains(c))).Distinct()
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))
.Select(l => new {
pencil = l,
colors = l.Color.Where(c => penColorIds.Contains(c.Id))
});