在linq查询中比较Enumerable和enumerable

时间:2015-10-16 14:59:14

标签: c# linq ienumerable

我想比较列表并使用LINQ返回公共对象。

我有Catalogs Model,其中包含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; }
 }

我有一个拥有environmnet的用户。 一个环境有很多子公司,我想与所有的供应商材料进行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 个答案:

答案 0 :(得分:1)

Enumerable.SelectMany Method允许您展平数据。要获得所有SupplierMaterials,您只需要展平两次。您的代码可能如下所示:

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