TL表的访问; DR我使用EntityFramework 5.0
与Oracle
,需要查询表中的两列只能用指数与两列NVL
。编写SQL查询,而不完全
细节经过数小时的尝试...我会尽量组织它尽可能。
的所需的SQL查询应该是:
SELECT t.Code, NVL(t.Local, t.Global) Description
FROM Shows t
Where t.Code = 123
那么是什么问题?如果我想要使用Context.Shows.Parts.SqlQuery(query)
我必须返回整行(*
),但后来我得到表访问完整,所以我必须只返回所需的列。
接下来的事情(其实有很多的尝试以下...之前),我已经试过这给出了一个非常紧密的结果是使用空合并运算(??
):
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
不能是抽象的,必须有默认的构造函数(事实并非如此)。
我不喜欢最后一步是创建类它只有这两个性质在(Code, Description
),现在... ...它的伟大工程,但我不想写一个类一样,每个查询。
想法?
您可以尝试编写自己的Tuple实现,该实现具有默认的构造函数并且是一个类。 – jure 2013-04-25 09:38:40
_“我不喜欢创建类的最后一步......但我不想为每个查询编写类”_ – gdoron 2013-04-25 09:42:48
您不必为每个查询编写新类,但只写一个通用的可重用类,并在您的示例中使用它作为您正在使用的Touple。 – jure 2013-04-25 09:48:56