12

People オブジェクトのリストを含む ICollection プロパティを持つオブジェクト Foo のコレクションがあります。

public class Foo
{
  public int Id { get; set; }
  public string Name { get; set; }
  public ICollection<Person> People { get; set; }
}

Person の別のリストがあります。

ICollection<Person> OtherPeople

People に OtherPeople の Person が含まれているすべてのオブジェクト Foo を見つける必要があります。コレクションを受け入れる .Contains のバージョンはありますか? 何かのようなもの:

var result = from f in FooCollection
             where f.People.Contains(otherPeople)
             select f;

それが重要な場合、私はこれをEntity Frameworkで使用しています。

4

2 に答える 2

17

C# Linq のAnyメソッドの使用について言及しています。

メソッドは基本的に、Anyそのコレクション内の要素のいずれか (Enumerable) が条件を満たしているかどうかを示します。あなたの場合、条件は別のコレクションに要素の 1 つが含まれているかどうかです。

元。

public bool HasPeople(ICollection<Person> original, ICollection<Person> otherPeople)
{
    return original.Any(p => otherPeople.Contains(p));
}

ただし、コレクションに条件を満たす要素がある場合、Anyメソッドは to 状態を返します。これはどの要素かを示しません。booleanAny

注目に値する Linq のもう 1 つのメソッドはWhere、条件を満たすすべての要素を提供することです。

元。

public IEnumerable<Person> GetPeople(ICollection<Person> original, ICollection<Person> otherPeople)
{
    return original.Where(p => otherPeople.Contains(p));
}

それがあなたを正しい方向に導くことを願っています。Entity Framework は Enumerable であるため重要ではありません。Linq メソッドはかなり単純であるため、これらを独自のメソッドに含める必要がないことをほとんど忘れていました。

于 2013-05-21T00:40:20.407 に答える