2011-09-19 132 views
2

我已經和包含命名對象:飛行複雜的LINQ查詢

它包含:

List<Segement> Segements 
List<Passenger> Pax  
List<Award> Awards 

爲每個獎項包括:

List<Segment> Segements 
Passenger Pax 

我要檢查的鏈段的所有組合和Pax(取自Flight obj),然後將它們與每個獎項中的現有組合進行比較。 這樣最後我會得到大獎的名單,其組合,不以任何獎勵對象

存在我不知道怎麼做,在一個LINQ查詢

+0

是不是段和pax列表分開?你在找什麼? –

+0

每位乘客在每個獎項中可以有不止一個分區。獎是一個乘客和他的Segements的組合。該航班包含所有可用的乘客和所有分段。我想獲得所有可能的區域和乘客的組合,但不會出現任何獎勵 –

+0

但是Segement(?)和Pax沒有任何共同之處。他們在不同的名單。你如何確定哪個分區屬於哪個乘客?你能解釋一下Segement是什麼嗎? –

回答

3

像這樣的事情?

var flight = new Flight(); 
    var x = from s in flight.Segements 
      from p in flight.Pax 
      select new 
    { 
     Pax = p , 
     Segemnt = s 
    }; 

    var y = from a in flight.Awards 
      from s in a.Segements 
      select new 
    { 
     Pax = a.Pax, 
     Segemnt = s 
    }; 

    var result = x.Except(y); 
1

認爲這個單查詢將產品所需的結果:

var query = 
    from f in flights 
    from p in f.Pax 
    from s in f.Segements 
    from a in f.Awards 
    where !((a.Pax.Name == p.Name) && (a.Segements.Select(_ => _.Id).Contains(s.Id))) 
    select new Award { Pax = p, Segements = new[] { s } }; 

很顯然,我對如何識別個別乘客和段的一些假設。另外,如果此查詢直接查詢實體框架數據源時,我會很驚訝。