У меня есть таблица Colour
, подобная этой:
Id Name VendorId
--------------------
1 Purple NULL
2 Blue NULL
3 Black NULL
4 Purple 1
5 Orange 1
6 Mauve 2
И я хочу получить все цвета с VendorId
как NULL, если только у этого цвета Name
нет записи с VendorId
прикрепленный, например, для VendorId = 1
Я бы хотел
Id Name VendorId
--------------------
2 Blue NULL
3 Black NULL
4 Purple 1
5 Orange 1
Отметив, что Purple
идентификатор строки 1
с NULL VendorId
отсутствует в списке. Для Id = 2
я бы получил строки 1,2,3
и 6
Сначала я думал .Select .Distinct
в Name, но мне нужен весь объект или хотя бы Id's
var result = _context.Colours
.Where(x => x.Vendor == null || x.Vendor.Id == vendorId)
.Select(x => x.Name)
.Distinct()
.ToList();
но если я использую .Select(x => x.Id).Distinct()
, тогда я получаю два экземпляра Purple
Как мне добиться этого в LINQ?
Редактировать:
Я только что попытался использовать
var result = _context.Colours
.Where(x => x.Vendor == null || x.Vendor.Id == vendorId)
.OrderByDescending(x => x.Id)
.GroupBy(x => x.Name)
.Distinct()
.ToList()
.Select(x => x.First())
.ToList();
Пытаясь получить все null
и id = 1
, затем упорядочить по убыванию Id и попробовать .GroupBy
, но я получил Client side GroupBy is not supported.