簡體   English   中英

復雜的LINQ查詢

[英]complex LINQ query

考慮一下這個集合

List<Person> people = new List<Person>
        {
            new Person{Name = "A", SSN="1", Age = 23},
            new Person{Name = "A", SSN="2", Age = 23},
            new Person{Name = "B", SSN="3", Age = 24},
            new Person{Name = "C", SSN="4", Age = 24},
            new Person{Name = "D", SSN="5", Age = 23}
        };

問題是:如何編寫LINQ查詢以對Age on Person進行分組,然后計算具有相同名稱的每個組中的人數?

我嘗試使用group by運算符,嵌套查詢所有可能性仍然無法弄清楚確切的查詢。

此致,Jeez

怎么樣

var ages  = from p in people 
            group p by p.Age into g
            select new { 
                Age = g.Key, 
                Count = g.Count(), 
                Names = from prs in g 
                        group prs by prs.Name
            };

Names屬性的名稱為Key,然后您可以為每個名稱獲取Count()

基本相同:

var peeps = 
    people.GroupBy(p => p.Age).Select(gp => new
          {
              Aged = gp.Key,
              Count = gp.Count(),
              NameGrp = gp.GroupBy(pers => pers.Name)
          });

吉姆

List<Person> persons = new List<Person>
{
   new Person{Name = "A", SSN="1", Age = 23},
   new Person{Name = "A", SSN="2", Age = 23},
   new Person{Name = "B", SSN="3", Age = 24},
   new Person{Name = "C", SSN="4", Age = 24},
   new Person{Name = "D", SSN="5", Age = 23}
};
var out1 = persons.GroupBy(p => new { p.Age, p.Name }).Select(s => new { Name = s.Key.Name,age = s.Key.Age, cnt = s.Count() }); ;
System.Threading.Tasks.Parallel.ForEach(out1, item => Console.WriteLine(item.Name + " " + item.age + " " + item.cnt));  

這與年齡和姓名的分組沒有什么不同,包括計數和按年齡和名稱的可選順序。 對的LINQ操作通常可以通過簡單地使用匿名類型來完成,如下所示:

var people = new List<Person> { 
    new Person { FirstName = "John", LastName = "Leidegren", Age = 25 },
    new Person { FirstName = "John", LastName = "Doe", Age = 25 },
    new Person { FirstName = "Not john", LastName = "Doe", Age = 26 },
};

foreach (var g in (from p in people
                   group p by new { p.Age, p.FirstName }))
{
    Console.WriteLine("Count: {0}", g.Count());

    foreach (var person in g.OrderBy(x => x.FirstName))
    {
        Console.WriteLine("FirstName: {0}, LastName: {1}, Age: {2}"
            , person.FirstName
            , person.LastName
            , person.Age);
    }
}

非常清楚這里的唯一鍵是什么,它可以更改,而不必更改剩余程序的結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM