で
おかげで、Union
オペレータはので、各カテゴリを組み立てるし、それらが動作するはず組み合わせ、唯一のユニークなコレクションの行を返します。
はアイテムのために、私は現在のユーザーによって管理されているすべてのアイテムを見つけることが最も効率的で、その後、彼らが属しているすべてのコレクションに見つけるだろうと思った:
var iCollections = Items.Where(i => i.ItemManagers.Any(im => im.UserId == CurrentUserID)).SelectMany(i => Collections.Where(c => c.Items.Contains(i)));
この他の方法を行うことも可能です、例えば現在のユーザーによって管理される項目を含むすべてのコレクションを見つける:コレクションのために
var iCollections = Collections.Where(c => c.Items.Any(i => i.ItemManagers.Any(im => im.UserId == CurrentUserID)));
を、あなたが指摘したように、あなただけの現在のユーザーがコレクションを管理するすべてのコレクションを見つける必要がある:
var cCollections = Collections.Where(c => c.CollectionManagers.Any(cm => cm.UserId == CurrentUserID));
アカウントのために、私たちは現在のユーザーが管理するすべてのアカウントとアカウントが所有するすべてのコレクションを見つける:
var aCollections = Accounts.Where(a => a.AccountManagers.Any(am => am.UserId == CurrentUserID)).SelectMany(a => a.Collections);
次にあなたがRESUをUnion
することができます一緒にLTS:あなたはもっとCollections.Where `のようなものを必要とするので、
私が想定し
var CurrentUserCollections = iCollections.Union(cCollections).Union(aCollections);
' CollectionManagers'は、多くの多くのリストである(C => c.CollectionManagers.Any(=> a.UserID == CurrentUserID))) 'を実行します。 – NetMage
あなたが話しているエンティティクラスの関連部分(特にナビゲーションプロパティ)を投稿すると、助けがはるかに簡単になります。 –