1

ユーザー オブジェクト ( List<User>) のリストがあります。このリストのすべてのオブジェクトには、イベントのリストがあります ( List<Event>)。すべてのユーザーのすべてのイベント リストにある共通オブジェクトを使用して、イベントの新しいコレクションを作成する必要があります。基本コレクションのすべてのユーザーは、イベントの新しいコレクションにすべてのイベントを持っていることを意味します。

foreach ループを使用して実行できると思いますが、LINQ を使用してこれを行うよりエレガントな方法があることを願っています。

うまくいけば、あなたが助けてくれるでしょう。ありがとうございました。

4

2 に答える 2

1

Enumerable.InterstectメソッドとEnumerable.Aggregateメソッドを使用できます。

// first get events for first user
IEnumerable<Event> seed = userList.First().Events;

// intersect with events for users (except the first)
var commonItems = userList.Skip(1).Aggregate(seed, (s, u) => s.Intersect(u.Events));
于 2013-03-30T20:25:44.213 に答える
0

アイデアは、すべてのユーザーのすべてのイベントを選択してから、等しいイベントのグループを作成し、ユーザーと同じ数のイベントを持つグループのみを選択し、これらのグループごとに 1 つのイベントのみを選択することです。

var x = users.SelectMany(u => u.Events) // select all events at once
  .GroupBy(e => e) // group them
  .Where(g => g.Count() == users.Count) // select groups with as many events as users
  .Select(g => g.Key); // select just one event for each group (the others are the same)
于 2013-03-30T20:35:32.073 に答える