代码之家  ›  专栏  ›  技术社区  ›  pierroz

c/linq选择具有相同属性的对象的子列表

  •  3
  • pierroz  · 技术社区  · 16 年前

    我是Linq的初学者,我想知道是否可以使用它来解决以下问题:

    我有一门课:

    public class myClass
    {
      public int Id { get; set; }
      public int Category { get; set; }
      public string Text { get; set; }
    }
    

    我有一份清单 myClass 物体。

    public List<myClass> myList;
    

    我能很容易地得到linq的子列表吗? myList 包含所有 我的班级 属性值所在的对象 Text 多次出现。

    例如,如果我有

    myClass A = new myClass { Id=1, Category=1, Text="Hello World!"};
    myClass B = new myClass { Id=2, Category=2, Text="Hello World!"};
    myClass C = new myClass { Id=3, Category=2, Text="Good Bye!"};
    myList.AddRange(new []{ A, B, C });
    

    我应该有东西 A B 在我的副手

    2 回复  |  直到 16 年前
        1
  •  5
  •   Marc Gravell    16 年前

    可能不理想,但可能:

    var result = myList.GroupBy(x=>x.Text).Where(grp => grp.Count() > 1)
                .SelectMany(x=>x); // .ToList() if you want a list
    

    或在查询语法中:

    var result = from x in myList
                 group x by x.Text into grp
                 where grp.Count() > 1
                 from y in grp
                 select y; // .ToList() if you want a list
    
        2
  •  1
  •   cjk    16 年前

    这工作:

      var sublist = (from a in myList
                    from b in myList
                    where a.Text == b.Text
                       && a.Id != b.Id
                    select a).Distinct();
    

    测试程序:

    void Main()
    {
    
        myClass A = new myClass { Id=1, Category=1, Text="Hello World!"};
        myClass B = new myClass { Id=2, Category=2, Text="Hello World!"};
        myClass C = new myClass { Id=3, Category=2, Text="Good Bye!"};
        myClass D = new myClass { Id=4, Category=7, Text="Hello World!"};
        List<myClass> myList = new List<myClass>(); 
        myList.AddRange(new []{ A, B, C, D });
    
          var sublist = (from a in myList                
          from b in myList                
          where a.Text == b.Text                   
          && a.Id != b.Id                
          select a).Distinct();
    
          sublist.Dump();
    }
    public class myClass{  public int Id { get; set; }  public int Category { get; set; }  public string Text { get; set; }}