【问题标题】:LINQ Group By multiple optional columnsLINQ Group By 多个可选列
【发布时间】:2018-11-15 13:45:36
【问题描述】:

我正在努力让我的大脑了解 LINQ Group By,并且我正在取得进展,但我的知识存在一个小缺陷。 我想按多个列进行分组,我知道我可以使用新的 {} 和一些字段进行分组。唯一的问题是,根据一些查询字符串值,我可能想也可能不想包括它们。

我有这个:

            var groupByResults = items.GroupBy(i => new 
            { 
                i.Product.Season.SeasonID,
                i.SourceLocation.LocationID, 
                i.Product.Brand.BrandID, 
                i.Product.Category.CategoryID, 
                i.Size.SizeID 
            });

我可能希望我的匿名对象只有第一个字段,或最后两个字段,或其他任何字段 - 取决于浏览器中已勾选哪些复选框。我正在考虑 ExpandoObject 但我正在努力如何从 i => .....

中获得关于“i”的关系

正如我所问的一切,只是我还没有找到适合 Google 的短语。任何帮助将不胜感激。

【问题讨论】:

  • 您可能想尝试“dynamic linq”....它很旧,但它可以工作。
  • 从问题的方式来看,您很可能需要一个投影( Select() ),这将允许您选择项目的属性。 GroupBy() 正在根据某些属性从项目中创建组(它不会从对象中排除成员)。
  • LINQ Grouping dynamically的可能重复
  • 使用lambda based IEqualityComparer factory,您可以使用采用IEqualityComparerGroupBy,并使用使用由布尔值保护的测试的lambda。

标签: c# .net linq


【解决方案1】:

您最初可以包含所有可能的 group by 条目,然后根据您的 UI 选择“存根”(: true)其中一些:

var groupByResults = items.GroupBy(i => new 
{ 
    SeasonID = UISeasonID != null ? i.Product.Season.SeasonID : true,
    LocationID = UILocationID != null ? i.SourceLocation.LocationID : true, 
    BrandID = UIBrandID != null ? i.Product.Brand.BrandID : true, 
    CategoryID = UICategoryID != null ? i.Product.Category.CategoryID : true, 
    SizeID = UISizeID != null ? i.Size.SizeID : true 
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多