我尝试将translane LinqToSql(EF 6.1)IQueryable查询到SQL文本(MS SQL Server)以便在util中使用,将查询结果转换为JSON,后者将绑定到DataGrid。请不要问我,为什么会这样。我在this link找到了很好的例子,每个工作都很好,直到我不使用匿名类型。例如:
var query = from t1 in DbContext.Table1.Where(r => r.Column1 == "filter")
select new
{
t1.Column1,
t1.Column2,
Column4 = t1.Column2 == "v" ? t1.Column3 : "InitValue"
}
此函数创建SQL查询:
select t1.Column1 as [Column1]
, t1.column2 as [Column2]
, case when t1.column2 is null then t1.column3 else "InitValue" end as [C1]
from Table1 as t1 where t1.Column1 = 'v'
此函数将 Column4 转换为 C1 的问题,我无法将列C1绑定到DataGrid。如何将 Column4 翻译为 Column4 而不是 C1 。
答案 0 :(得分:0)
我不确定您的查询的有效性(原文似乎是通过Column1匹配"过滤"并且sql匹配' v'和== isn& #39; t sql),但要回答你的问题,你需要做的就是替换
as [C1]
与
as [Column4]
我本以为会有更准确的SQL翻译
select
t1.Column1 as [Column1]
, t1.column2 as [Column2]
, case when t1.column2 = 'v' then t1.column3 else 'InitValue' end as [Column4]
from Table1 as t1
where t1.Column1 = 'filter'
答案 1 :(得分:0)
Column4 = t1.Column2 == "v" ? t1.Column3 : "InitValue"
将始终在SQL Server中转换为CASE并以资本命名C' C'对于Case后跟数字 - 在SQL查询中的位置,所以你可以将DataBound Column定义为[C1],只要你不将Linq中的语句移动到另一个地方它就会保持一致。