Linq加入组按条件选择不同类型的对象
问题描述:
我使用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 };
});
但是这会给出错误。我怎样才能做到这一点?
答
是的,你可以喜欢这个,
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;
});
我不认为你可以做到这一点,因为你想返回有2种不同的匿名类型的集合。分开做,并在哪里使用。 – CodingYoshi
*你得到了什么错误? –
你不能这样做,因为EF无法确定这是哪种类型的IQueryable。 EF不能在一个查询信息中混合两种类型的返回对象,因为IQueryable包含查询类型的类型和映射信息。在执行查询后你必须做这个选择。 – DevilSuichiro