mam 3 modele o nazwie:C# LINQ podmiotom zapytania na przecięciu dwóch różnych właściwościach
Pencil mający Pencil.Id (int) i Pencil.Colors (IEnumerable) Property
Pen o Pen.Id (int) i Pen.Colors (IEnumerable) Właściwość
Kolory o identyfikatorze i nazwisku.
Pencil ma związek z kolorów (many-to-many) Pen ma związek z kolorami (wiele do wielu)
Chcę zbudować kwerendę, która pokaże mi tego samego koloru ołówki za pióro, które trzymam.
Używam poniżej kwerendy LINQ-podmioty:
int id = id_of_the_pen_that_i_am_holding;
Pen p = db.Pens.Find(id);
var list = from m in db.Pencils where m.Colors.Intersect(p.Colors) != null select m;
Kolory model jest IEnumerable więc ma więcej niż 1 kolor. Na przykład; pióro ma 15 różnych kolorów, a ołówek ma 25 różnych kolorów. Chcę przynieść koreański ołówek, jeśli jeden z kolorów długopisu, który trzymam, jest również dostępny w palecie kolorów tego ołówka.
Ale otrzymuję wyjątek, aby używać zmiennych regularnych, takich jak int lub string, a nie obiektów.
Co mogę zrobić? Z góry dziękuję za pomoc.
edycja: Utworzyłem nowe pytanie do następnej ewentualnej emisji: C# LINQ to Entities- Properties on the intersection of an object and a collection of objects
czy nie ponad komplikuje to? Pomyśl o zwykłym SQL (do czego twoja kwerenda zostanie przekonwertowana), nie możesz zamiast tego po prostu powiedzieć z m w db.Pencils gdzie m.Color = p.Color wybierz m? –
Model kolorów jest IEnumerable, więc ma więcej niż 1 kolor. Na przykład pióro ma 15 różnych kolorów, a pióro ma 25 różnych kolorów. Chcę sprawdzić, czy jeden z kolorów pióra jest dostępny w skali kolorów ołówka. – MrGorki
Jeśli twoja własność koloru jest przeliczalna, to może nazwa "Kolory" lub "Paleta" lepiej opisa jej intencję. –