TL;DR我正在使用EntityFramework 5.0
withOracle
并且需要仅使用两列的索引来查询两列NVL
的表。
经过数小时的尝试后的细节......我会尽量组织它。
所需的SQL 查询应该是:
SELECT t.Code, NVL(t.Local, t.Global) Description
FROM Shows t
Where t.Code = 123
那么问题是什么?如果我想使用,Context.Shows.Parts.SqlQuery(query)
我必须返回整行(*
),然后我得到Table Access Full,所以我必须只返回所需的列。
我尝试过的下一件事(实际上在以下之前有很多尝试......)给出了非常接近的结果是使用空合并运算符(??
):
Context.Shows.Where(x => x.Code == 123)
.Select(x => new { x.Code, Description = x.Local ?? x.Global);
但是它使用的 SQL 使用起来很复杂case & when
,而不是使用我 Code, Nvl(Local, Global)
的关键索引!
我的下一步是使用Database.SqlQuery
context.Database.SqlQuery<Tuple<int, string>>("the Raw-SQLQuery above");
Tuple
但是我得到一个不能是抽象的错误,并且必须有默认的ctor(它没有)。
我不喜欢的最后一步是创建一个只有这两个属性(Code, Description
)的类,现在......它工作得很好,但我不想为这样的每个查询编写一个类。
想法?