2016-06-01 5 views
1

Linqクエリを使用して、私のwebserviceでCRM 2013から選択します。LinQはリストをパラメータとして持つオブジェクトを選択します

私の最後のエンティティは次のようになります。

class Car{ 
    Guid carId{get;set; 
    String carName{get;set;} 
    Guid carFooId{get;set;} 
} 

そしてHouseは、次のようになります:

class House{ 
    Guid houseId{get;set;} 
    String houseName{get;set;} 
    Guid houseFooId{get;set;} 
} 

さて、私の問題は次の通りであるCarはこのようになります

class FOO{ 
    Guid fooId{get;set;} 
    String fooName{get;set;} 
    List<Car> fooCars{get;set;} 
    List<House> fooHouses{get;set;} 
} 

私は一度だけcrmをクエリし、その中のすべてのリストを持つFOOのリストを取得したいと思う。現時点では私はこのように実行します。

List<FOO> foes = crm.fooSet 
    .Where(x => x.new_isActive != null && x.new_isActive.Value = true) 
    .Select(x => new FOO(){ 
    fooId = x.Id, 
    fooName = x.Name, 
    fooCars = crm.carSet.Where(c => c.fooId == x.Id) 
          .Select(c => new Car(){ 
          carId = c.Id, 
          carName = c.Name, 
          carFooId = c.fooId 
          }).ToList(), 
    fooHouses = crm.houseSet.Where(h => h.fooId == x.Id) 
          .Select(h => new House(){ 
          houseId = h.Id, 
          houseName = h.Name, 
          houseFooId = h.fooId 
          }).ToList() 
}).ToList(); 

私の目的はnon-lambda queriesLinQを使用して、私はjoingroup-byに必要なすべての件のデータを取得することですが、私は実際にそれを達成する方法がわかりません、任意のヒント?

おかげで、すべての

+0

現在のクエリの何が問題になっているのですか?それとも、それを別の構文に変換したいだけですか? –

+0

@ YacoubMassad現在のクエリはうまくいきます。私の唯一の問題は効率についてです。現在のクエリの中でさらに2つのクエリを実行する代わりに、サブクエリの代わりに1つのクエリを持つように、結合とグループ化を実行することをお勧めします。私がうまく説明したらダンノー –

答えて

2

私は何を探していることはgroup joinだと思う:

var query= from f in crm.fooSet 
      join c in crm.carSet on c.fooId equals f.Id into cars 
      join h in crm.houseSet on h.fooId equals f.Id into houses 
      where f.new_isActive != null && f.new_isActive.Value == true 
      select new FOO{ fooId = f.Id, 
          fooName = f.Name, 
          fooCars=cars.Select(c => new Car(){ 
                   carId = c.Id, 
                   carName = c.Name, 
                   carFooId = c.fooId 
                   }).ToList(), 
          fooHouses=houses.Select(h => new House(){ 
                   houseId = h.Id, 
                   houseName = h.Name, 
                   houseFooId = h.fooId 
                    }).ToList() 
         }; 
+0

遅く返事を申し訳ありませんが、私は週末に出かけていました。私には1つの質問しかありません。「車」や「住宅」が空の場合は、空のリストを取得するか、レコードをスキップしますか? –

+0

私が覚えている限り、それは空のリストを得るでしょうが、今は完全にはわかりません;) – octavioccl

関連する問題