IQueryable a;
IQueryable b;
IQueryable res = from ab in a.Union(b)
select {
prop = ab.prop,
deletable = ab.type == CONSTANT_TYPE &&
(from d in deletableTable
where key = CONSTANT_KEY
select d).FirstOrDefault().RenderCode == CONSTANT_RENDER_CODE
};
return res;
以上代码引发错误
b
出现在两个结构不兼容的初始化中 在单个LINQ to Entities查询中。可以在以下类型中初始化类型 同一查询中的两个位置,但前提是设置了相同的属性 这两个地方的属性均设置为相同的顺序。
我不确定是什么原因,但是我猜想,当我返回IQueryable时,由于d in deletableTable ? true : false
,它无法构建sql字符串。
在sql中看起来像
SELECT
case
when (SELECT TOP 1 code FROM deletable) = CONSTANT then true
else false
end
如果我想返回IQueryable,是否有linq的解决方法?
答案 0 :(得分:0)
该问题的错误消息是由于可查询a和可查询b中缺少可删除内容引起的。
IQueryable a = getA();
IQueryable b = getB();
IQueryable res = from ab in a.Union(b)
select {
prop = ab.prop,
deletable = ab.type == CONSTANT_TYPE &&
(from d in deletableTable
where key = CONSTANT_KEY
select d).FirstOrDefault().RenderCode == CONSTANT_RENDER_CODE
};
return res;
getA
和getB
最初返回的对象具有属性prop
。
如果您想执行from ab in a.Union(b) select deletable = 12
,即使它在代码中常量为uf 12,也应在querybable a和queryable b中声明deletable
字段,否则将出现问题错误。
我添加了deletable
声明来更正错误:
getA() {
from a ...
select new {
prop,
deletable = false //add field, to use union
}
}
getB() {
from b ...
select new {
prop,
deletable = false //add field, to use union
}
}