【问题标题】:Filter grouped products with Linq使用 Linq 过滤分组产品
【发布时间】:2017-01-31 19:02:20
【问题描述】:

我有一个类 productInfo,它具有属性 ProductIdLocale,并尝试显示具有当前 locale(id) 的产品,并显示具有相同 id 的产品。

这意味着,在按产品 id 分组后,一旦有一个产品的区域设置等于当前区域设置,我们将显示该组(以及它们各自的区域设置)。

以下是伪代码/示例:

 public class productInfo
{
 public int ProductId {get;set;}
 public int LocaleId  {get;set;}
}


List<productInfo> listProduct = List<productInfo>();
listProduct.Add(new productInfo{ ProductId = 100, LocaleId = 1 });
listProduct.Add(new productInfo{ ProductId = 100, LocaleId = 2 });
listProduct.Add(new productInfo{ ProductId = 100, LocaleId = 3 });
listProduct.Add(new productInfo{ ProductId = 200, LocaleId = 4 });
listProduct.Add(new productInfo{ ProductId = 300, LocaleId = 1 });
listProduct.Add(new productInfo{ ProductId = 300, LocaleId = 5 });
listProduct.Add(new productInfo{ ProductId = 400, LocaleId = 6 });

如果当前语言环境等于 1,则最终列表应包含:

productInfo { ProductId = 100, LocaleId = 1 }
productInfo { ProductId = 100, LocaleId = 2 }
productInfo { ProductId = 100, LocaleId = 3 }
productInfo { ProductId = 300, LocaleId = 1 }
productInfo { ProductId = 300, LocaleId = 5 }

以下将从列表中删除:

productInfo { ProductId = 200, LocaleId = 4 }
productInfo { ProductId = 400, LocaleId = 6 }

如何使用 Linq 实现这一点?

【问题讨论】:

    标签: c# linq group-by


    【解决方案1】:
    productList.GroupBy(p => p.ProductId)
               .Where(g => g.Any(p => p.LocaleId == 1))
               .SelectMany(g => g)
               .ToList();
    

    将 1 替换为当前语言环境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多