【问题标题】:Comparing Enumerable with enumerable in a linq query在 linq 查询中比较 Enumerable 和 enumerable
【发布时间】:2015-10-16 23:30:57
【问题描述】:

我想使用 LINQ 比较列表并返回常见对象。

我有包含供应商材料集合的目录模型

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);

对于给定环境,如何从每个子公司的所有目录中获取所有供应商材料?

【问题讨论】:

  • 不相关,但如果FirstOrDefault 返回 null,user.Environment.FirstOrDefault().Subsidiary 将抛出异常。如果总是有一个,那么您可能应该使用First()。否则,您将需要进行空检查。
  • 环境总是有一个,已经改成First()

标签: c# linq ienumerable


【解决方案1】:

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

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

【讨论】:

  • 这也可以通过查询语法来完成(实际上可能更容易阅读),就像 Magu 的解决方案一样。
猜你喜欢
  • 2012-04-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多