获取列表中具有属性设置为相同值的所有项目

时间:2015-08-04 13:15:42

标签: c# wpf linq list

假设我有一个列表,List<Foo> SomeListFoo是一个包含两个属性BarBaz的类。

是否有LINQ查询允许我选择Foo共享相同值的Bar类型的所有项目,以便它们可以一起处理?

类似的东西:

foreach (List<Foo> foos in SomeList.SelectBy (x => x.Bar))
{
// process foos
}

以便首先处理包含Foo的所有Bar = 0项,然后将Bar设置为1,依此类推。

这可以轻松完成,还是我需要自己编写该功能?

2 个答案:

答案 0 :(得分:2)

您需要的是先按照分组,然后按键排序列表中的项目。

var grouped = SomeList.GroupBy(item => item.Bar)
                      .OrderBy(gr=>gr.Key);


foreach (var item in grouped)
{
    // item has a Key property associated with the value of Bar
    // You can take the list of Foo by simply calling this
    // item.ToList() and then you can process this.
}

答案 1 :(得分:0)

你的问题不够明确,所以我猜错了。希望您正在寻找以下内容:

 List<Foo> SomeList = new List<Foo>();
        SomeList.Add(new Foo() {Bar=1,Baz ="ASDASD"}); 
        SomeList.Add(new Foo() {Bar=2,Baz ="dqwe"});
        SomeList.Add(new Foo() { Bar = 5, Baz = "fsdfsgsdg" });
        SomeList.Add(new Foo() { Bar = 5, Baz = "dghjhljkl" }); 
      foreach(Foo f in  SomeList.Where(x=>x.Bar==5).ToList())
      {
      // do some operations
      }
  

它允许您选择共享相同类型的所有Foo类型的项目   Bar的值(此处为5,如果需要,请将其设置为动态)

根据 Christos的建议,如果订单很重要,您可以申请OrderBy