2

Personオブジェクトのコレクションがあるとしましょう-

public class Person
{
  public string Firstname { get; set; }
  public string Surname { get; set; }
}

今、私がパーティーに招待した家族の名前を保持している別のコレクションを持っているとしましょう-

var guestlist = new List<string> {"Stark", "Wayne"};

linq(できればランバベースですが、これはそれほど重要ではありません)を使用して、StarkまたはWayneファミリーのメンバーのみを引き出すにはどうすればよいですか?すなわち。私の最初のコレクションにウェインまたはスタークの家族が含まれていることを示すだけでなく、別の(3番目の)コレクションになりたいと思っています。

4

4 に答える 4

4

これを試して :

var invited = persons.Where(p => guestlist.Contains(p.Surname));
于 2013-03-11T02:17:26.930 に答える
2

この操作は、概念的には結合です。これは、2 つの異なるセットから一緒に「属する」オブジェクトのマッチングです。

var query = from person in people
    join name in guestlist 
    on person.Surname equals name
    select person;

人のリスト内の各アイテムの名前のリストで使用することを含む他のすべてのソリューションはContains、両方のコレクションのサイズが小さい場合に機能しますが、ソリューションは大きなコレクションではまったくうまくスケーリングされないことに注意してください。アイテムごとに線形検索を行う必要があります。結合が適切に実装されている場合 (LINQ ではこれが行われます)、ゲスト リストはより効率的に検索できるコレクションに配置されます。

于 2013-03-11T03:32:59.887 に答える
1

私はこれを試してみます:

var peopleList = GetPeopleList();
var guestList = new List<string> {"Stark", "Wayne"};
var matchList = peopleList.Where(o => guestList.Contains(o));
于 2013-03-11T02:17:01.757 に答える
1
var result = people.Where(x => guestlist.Contains(x.Surname));
于 2013-03-11T02:17:57.357 に答える