0

Personというクラスがあるとしましょう。

public class Person
{
    public int Age { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

そして人のリスト:

Person { Age = 20, FirstName = "John", LastName = "Joe" }
Person { Age = 20, FirstName = "John", LastName = "Joe" }
Person { Age = 10, FirstName = "James", LastName = "Dokes" }

私が欲しいのは、年齢、名、姓で人をグループ化した(新しいプロパティを持つ新しいまたは古い)リストです。また、そのオブジェクトがグループ化された回数も知りたいです。

したがって、上記の結果は次のようになります。

Person { Age = 20, FirstName = "John", LastName = "Joe", Count = 2 }
Person { Age = 10, FirstName = "James", LastName = "Dokes", Count = 1 }
4

3 に答える 3

6

単純:

people.GroupBy(x => new { x.Age, x.FirstName, x.LastName })
      .Select(x => new { x.Key.Age, x.Key.FirstName, x.Key.LastName, Count = x.Count() });
于 2013-02-20T08:23:37.553 に答える
1

投稿する直前に、JustAnotherUserYouMayKnowからの回答がすでに表示されていたので、キャンセルする予定でしたが、とにかく、resultSelector(個別の投影ではなく)パラメーターを使用してGroupByのみを使用して同じ結果を表示するために投稿しています。

var personList = new List<Person> {
    new Person { Age = 20, FirstName = "John", LastName = "Joe" },
    new Person { Age = 20, FirstName = "John", LastName = "Joe" },
    new Person { Age = 10, FirstName = "James", LastName = "Dokes"}};

var results = personList.GroupBy(per => new { per.Age, per.FirstName, per.LastName },
    (key, items) => new { key.Age, key.FirstName, key.LastName, Count = items.Count() } );
于 2013-02-20T08:31:28.857 に答える
1

非プロセスの代替:

List<Person> ls = new List<Person>();
ls.Add (new Person() { Age = 20, FirstName = "John", LastName = "Joe" });
ls.Add(new Person() { Age = 20, FirstName = "John", LastName = "Joe" });
ls.Add(new Person() { Age = 10, FirstName = "James", LastName = "Dokes" });

var result = (from cur in ls
                group cur by new { Age = cur.Age, Name = cur.FirstName, LastName = cur.LastName }
                into tmpResult
                select new { tmpResult.Key.Age,tmpResult.Key.LastName,tmpResult.Key.Name,Count = tmpResult.Count()});
于 2013-02-20T08:33:23.983 に答える