【问题标题】:how to write this into linq to object query?如何将其写入 linq to object 查询?
【发布时间】:2010-02-24 20:32:03
【问题描述】:

来自一个列表,它有 3 个属性 我想返回该类的新列表,其中列表中的属性 1 重复等于 X

举个例子;

1,a,b
1,c,d
1,e,f
2,a,b
2,c,d
3,a,b
3,c,d
3,e,f
4,a,b
5,a,b
5,c,d
5,e,f
6,a,b
6,e,f

其中 X = 1 将返回该列表

4,a,b

其中 X = 2 将返回该列表

2,a,b
2,c,d
6,a,b
6,e,f

其中 X = 3 将返回该列表

1,a,b
1,c,d
1,e,f
3,a,b
3,c,d
3,e,f
5,a,b
5,c,d
5,e,f

【问题讨论】:

    标签: c# .net vb.net linq


    【解决方案1】:

    分组的完美案例!

    var groups = list.GroupBy(s => s.Attribute1);
    var recur_1 = groups.Where(g => g.Count() == 1).SelectMany(s => s);
    var recur_2 = groups.Where(g => g.Count() == 2).SelectMany(s => s);
    var recur_3 = groups.Where(g => g.Count() == 3).SelectMany(s => s);
    

    【讨论】:

    • 修复了我没有调用 SelectMany 的地方
    【解决方案2】:
    seq.Where(l => seq.Count(i => i.attrib1 == l.attrib1) == X);
    

    【讨论】:

      【解决方案3】:
      public static void Test()
      {
          var list = new[]
                      {
                          new {p1 = 1, p2 = 'a', p3 = 'b'},
                          new {p1 = 1, p2 = 'c', p3 = 'd'},
                          new {p1 = 1, p2 = 'e', p3 = 'f'},
                          new {p1 = 2, p2 = 'a', p3 = 'b'},
                          new {p1 = 2, p2 = 'c', p3 = 'd'},
                          new {p1 = 3, p2 = 'a', p3 = 'b'},
                          new {p1 = 3, p2 = 'c', p3 = 'd'},
                          new {p1 = 3, p2 = 'e', p3 = 'f'},
                          new {p1 = 4, p2 = 'a', p3 = 'b'},
                          new {p1 = 5, p2 = 'a', p3 = 'b'},
                          new {p1 = 5, p2 = 'c', p3 = 'd'},
                          new {p1 = 5, p2 = 'e', p3 = 'f'},
                          new {p1 = 6, p2 = 'a', p3 = 'b'},
                          new {p1 = 6, p2 = 'e', p3 = 'f'}
      
      
                      };
      
          for (int i = 1; i <= 3; i++)
          {
              var items = from p in list
                       group p by p.p1
                       into g
                          where g.Count() == i
                          from gi in g
                          select gi;
      
              Console.WriteLine();
              Console.WriteLine("For " + i);
              Console.WriteLine();
              foreach (var x in items)
              {
                  Console.WriteLine("{0},{1},{2}", x.p1, x.p2, x.p3);
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        • 1970-01-01
        相关资源
        最近更新 更多