C# 在外部对象/键Linq上连接并获得不同

C# 在外部对象/键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;} } 此查询的结果返回一个

我有一个这样的模型

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;}
}
此查询的结果返回一个
列表
如何从该列表中获取供应商名称列表???

您可以尝试此操作

var supplier_names = _context.Products.Where(condition)
                             .SelectMany(u => u.Suppliers).Select(a => a.Name).ToList(); 
你可以试试这个

var supplier_names = _context.Products.Where(condition)
                             .SelectMany(u => u.Suppliers).Select(a => a.Name).ToList(); 

多亏了Camilo Terevino,这个查询才有效

var suppliers = _context.Products.Where(condition).SelectMany(u => u.Suppliers).GroupBy(u => u.Name).Select(u => u.First()).ToList()

多亏了Camilo Terevino,这个查询才有效

var suppliers = _context.Products.Where(condition).SelectMany(u => u.Suppliers).GroupBy(u => u.Name).Select(u => u.First()).ToList()

您需要为实现IEqual的类提供一个接口,以便可以使用Distinct。@Camiloterevento我尝试过,但它不起作用,因为选择(u=>u.Suppliers)是一个列表,而不是供应商,因此(u=>u.name)没有公开。对不起,我忘记更改为
SelectMany
。您只需使用
\u context.Products.Where(condition).SelectMany(u=>u.Suppliers).GroupBy(u=>u.Name).Select(u=>u.First()).ToList()
@CamiloTerevinto,谢谢。添加它作为我接受的答案您需要为实现IEqual的类提供一个接口,以便您可以使用Distinct。@Camiloterevento我尝试过,但它不起作用,因为选择(u=>u.Suppliers)是一个列表而不是供应商,所以(u=>u.name)没有公开。对不起,我忘记更改为
SelectMany
。您只需使用
\u context.Products.Where(condition).SelectMany(u=>u.Suppliers).GroupBy(u=>u.Name).Select(u=>u.First()).ToList()
@CamiloTerevinto,谢谢。将其添加为我接受的答案
。选择(u=>u.Suppliers)
部分答案不正确
。选择(u=>u.Suppliers)
部分答案不正确