2017-11-04 158 views
0

我使用linq和lambda表達式對兩個集合進行分組。Linq加入組按條件選擇不同類型的對象

 var result = firstCollection.GroupJoin(secondCollection, 
      s => s.Id, 
      p => p.Sid, 
      (first, second) => 
      { 
       return new { first.Id }; 
      }); 

這是有效的。但是我想按照如下條件進行選擇:

 var result = firstCollection.GroupJoin(secondCollection, 
      s => s.Id, 
      p => p.Sid, 
      (first, second) => 
      { 
       if (someCondition) 
        return new { id = first.Id }; 
       else 
        return new { 
          id = first.Id, 
          name = first.Name }; 
      }); 

但是這會給出錯誤。我怎樣才能做到這一點?

+0

我不認爲你可以做到這一點,因爲你想返回有2種不同的匿名類型的集合。分開做,並在哪裏使用。 – CodingYoshi

+0

*你得到了什麼錯誤? –

+0

你不能這樣做,因爲EF無法確定這是哪種類型的IQueryable。 EF不能在一個查詢信息中混合兩種類型的返回對象,因爲IQueryable包含查詢類型的類型和映射信息。在執行查詢後你必須做這個選擇。 – DevilSuichiro

回答

1

是的,你可以喜歡這個,

var result = firstCollection.GroupJoin(secondCollection, 
      s => s.Id, 
      p => p.Sid, 
      (first, second) => 
      { 
       dynamic foo; 
       if (someCondition) 
        foo = new { id = first.Id }; 
       else 
        foo = new { 
          id = first.Id, 
          name = first.Name 
        }; 

       return foo; 
      });