2017-10-03 22 views
0

を使用して、メインオブジェクトを返すI持って、次の二つのクラス(DBオブジェクト):私はIDが1の人を検索してすべての車を返すことができるようにしたいネストされたコレクションをフィルタリングし、LINQ

class Person 
{ 
    public int Id; 
    public List<Car> CarsOwned; 
} 

class Car 
{ 
    public string Name; 
} 

その人が所有するフェラーリの名前&。私はpersonオブジェクトを返すようにします。

私がこれまで持っている:

List<string> carsFilter = new List<string>(); 
carsFilter.Add("Ford"); 
carsFilter.Add("Ferrari"); 

person.Where(x => x.Id == 1).CarsOwned.Where(y => carsFilter.Contains(y.Name)); 

は、どのように私の代わりに車対象の人物オブジェクトを返すのですか?あなたは二つの条件、ID用と車のための別のものを追加する必要が

+1

あなたの質問は少し混乱して:*」私は...所有者が所有するフォード&フェラーリの名前を持つすべての車**を返すしたいです**私は**人のオブジェクト**返される "*。すべての車や人を戻したいですか?その人がほしいと思うように聞こえますが、 'Id'フィールドがユニークであると仮定するのは簡単です。この場合、あなたは一人しかいなくなるでしょう。 –

+0

Yuriyは正しいアイデアを持っていますが、文法的な間違いはありません。また、何の説明もありません。 'person.Where(x => x.Id == 1 && x.CarsOwned.Any(c => carsFilter.Contains(y.Name)));'を試してください。 –

+0

@RufusL人物のオブジェクトを返信したいが、名前がferrari&fordの車が含まれているように、CardOwnedをフィルタリングしたい。 –

答えて

0
person.Where(x => x.Id == 1 && CarsOwned.Any(c => carsFilter.Contains(y.Name))); 
0

(人のIQueryableであると私は、可能な場合、クエリは1 DBトランザクションで行われたいです)。今、あなたは所有すべきすべての車のリストを持っています。あなたはcarsFilterコレクションで持っているすべての車、それらの者を見つけることができますAllAny拡張メソッドの組み合わせを使用して:あなたは2つの異なるものを返すようにしたいと述べているので

var result=persons.Where(p => p.Id == 1 && carsFilter.All(c=>p.CarsOwned.Any(e => e.Name==c)); 
関連する問題