2017-11-04 106 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; 
      });