2015-10-16 105 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

這真是太棒了,爲我工作!謝謝 :) –