2015-10-16 116 views
0

我想使用LINQ来比较列表并返回通用对象。将Enumerable与linq查询中的枚举进行比较

我的目录型号包含supplierMaterials

public partial class Catalogs{   
     public int IdCatalog { get; set; } 
     public virtual ICollection<SupplierMaterials> SupplierMaterials { get; set; }   
    } 

然后,我有一个包含目录

public partial class Subsidiary{ 
     public int IdSubsidiary { get; set; } 
     public virtual ICollection<Catalogs> Catalogs { get; set; } 
} 

然后,我有一个集合SupplierMaterials型号

子公司模式的集合
public partial class SupplierMaterials{ 
     public int IdCatalog { get; set; } 
     public int IdSupplierMaterials{ get; set; } 
} 

我有一个用户有一个环境。 一个环境有许多子公司,我想用用户的子公司 中的所有供应商材料进行linq查询。 我有这个LINQ查询,但我不知道如何使where子句

var subsidiary = user.Environment.First().Subsidiary; 
query = (from x in db.SupplierMaterials 
     join y in db.Catalogs on x.IdCatalog equals y.IdCatalog 
     where y.Subsidiary.Any(subsidiary => y.Subsidiary) 
     select x); 

我怎样才能得到所有所有的目录从每一个子公司supplierMaterials对于一个给定的环境呢?

+1

无关,但'user.Environment.FirstOrDefault()如果'FirstOrDefault'返回null Subsidiary'会抛出异常。如果总是有一个,那么你可能应该使用'First()'。否则,您将需要一个空检查。 –

+0

环境总是有一个,已经将其更改为First() –

回答

1

Enumerable.SelectMany Method可让您平整数据。要获得所有供应商材料,您只需要平整两次。你的代码可能是这个样子:

var supplierMaterials = user.Environments.First().Subsidiarys 
         .SelectMany(x => 
          x.Catalogs.SelectMany(y => 
           y.SupplierMaterials)); 
+0

这也可以通过查询语法来完成(实际上可能更易于阅读),如Magu的解决方案。 –

+0

这真是太棒了,为我工作!谢谢 :) –