编程语言
首页 > 编程语言> > C#LINQ到实体-对象和对象集合的交集上的属性

C#LINQ到实体-对象和对象集合的交集上的属性

作者:互联网

我曾经问过一个类似的问题,目的是了解如何获得与我持有的模型具有相同属性的另一组模型.

现在的问题是:
因此,“相似属性”的名称是什么,实际上将我引向了另一组属性.

原始帖子是:
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)属性的笔
>具有ID和名称的颜色.

颜色模型是IEnumerable,因此具有超过1种颜色.例如;笔有15种不同的颜色,铅笔有25种不同的颜色.如果我所握笔的一种颜色在该笔的调色板中也可用,我想带一下相应的铅笔.

拉斐尔的绝佳解决方案是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来说还很陌生,非常感谢您的帮助.

解决方法:

如果您手中握有多支笔,请使用(在可变笔中)

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()

标签:linq-to-entities,c,entity-framework
来源: https://codeday.me/bug/20191101/1980447.html