Присоединиться и получить различие от посторонних объектов / Keys Linq

#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) часть вашего ответа неверна