#c# #linq
#c# #linq
Вопрос:
У меня есть такая модель
public class Product
{
public int Id { get;set;}
...
public virtual ICollection<Supplier> Suppliers {get;set;}
}
public class Suppliers
{
public int Id {get;set;}
...
public string Name {get;set;}
}
Мой запрос Linq построен следующим образом, чтобы получить уникальные продукты
var suppliers = _context.Products.Where(condition).Select(u => u.Suppliers).ToList(); //
Результат этого запроса возвращает List<Iqueryable<Supplier>>
Как мне получить список имен поставщиков из этого списка??
Комментарии:
1. Вам нужен интерфейс для класса, который реализует IEqual, чтобы вы могли использовать Distinct .
2. @CamiloTerevinto Я попробовал это, и это не сработало, потому что выбор (u => u.Поставщики) — это список, а не поставщик, поэтому (u => u.name ) не подвергается воздействию.
3. Извините, я забыл изменить на
SelectMany
. Вы можете просто использовать_context.Products.Where(condition).SelectMany(u => u.Suppliers).GroupBy(u => u.Name).Select(u => u.First()).ToList()
4. @CamiloTerevinto Это сработало, спасибо. Добавьте это как ответ, чтобы я принял
Ответ №1:
Благодаря Камило Теревинто этот запрос работает.
var suppliers = _context.Products.Where(condition).SelectMany(u => u.Suppliers).GroupBy(u => u.Name).Select(u => u.First()).ToList()
Ответ №2:
Вы можете попробовать это
var supplier_names = _context.Products.Where(condition)
.SelectMany(u => u.Suppliers).Select(a => a.Name).ToList();
Комментарии:
1.
.Select(u => u.Suppliers)
часть вашего ответа неверна