LINQ的唯一值

问题描述:

我有泛型类的列表,其中包括2字符串属性和1名名单为属性的LINQ的唯一值

代码snipnets如下:

public Class abc 
{ 
    public int ID { get; set; } 
    public String Name { get; set; } 
    List<String> myList; 
    public List<String> Subjects 
    { 
     get 
     { 
      if (myList == null) 
      { 
       myList = new List<string>(); 
      } 
      return myList; 
     }    
    } 
    public abc() 
    { 
    } 
    public abc(int id, String name, params string[] subjects) 
    { 
     Subjects.AddRange(subjects.AsEnumerable<String>()); 
     ID = id; 
     Name = name; 

    } 
} 

List<abc> myList = new List<abc>();  
myList.Add(new abc(1, "p1", "Maths", "Science")); 
myList.Add(new abc(2, "p2", "Maths", "Art")); 
myList.Add(new abc(3, "p3", "Art", "Science"));  
myList.Add(new abc(4, "p4", "Geometry", "Maths")); 

我需要的输出

Subject Count Person 

Maths 3  p1,p2,p4 

Science 2  p1,p3 

Art  2  p2,p3 

Geometry 1  p4 

看起来像你想要的东西,如:

var query = from item in myList 
      from subject in item.Subjects 
      group item.Name by subject into g 
      select new { Subject = g.Key, 
         Count = g.Count(), 
         Person = string.Join(",", g) }; 

(如果你使用.NET 3.5更改gg.ToArray()string.Join电话。)

+0

是的,这是我所要求的,谢谢:) – saloni 2011-04-04 08:44:47

var result =myList.SelectMany(p => p.Subjects 
           .Select(q => new{Person = p.Name, Subject = q, ID = p.ID})) 
          .GroupBy(p => p.Subject) 
          .Select(p => new {Name = p.Key, Count = p.Count(), Persons = p 
           .Aggregate("", (a, b) => a + b.Person 
+ ",").TrimEnd(',')}).OrderBy(p => p.Count); 

遍历此集合,并打印结果需要 - 性能结果都是名称,数量,人员

+0

这工作太..谢谢 – saloni 2011-04-04 08:45:14