我是第一次使用 LINQ to Entities。
我的数据存储有一个字符串字段,取决于某些其他字段,它通常是一个整数。我无法更改此数据库的结构。
EF 中有问题的表是 masterdatas。
我正在尝试根据基于 varname 字段的分组为 varvalue 字段中的这些记录创建总和,如下所示:
var varsum = from md in context.masterdatas
where md.imparcid == SelectedDataSet.imparcid && md.varname == t.VarName
group md by md.varname into g
select new { varname = g.Key, SummedAmt = g.Sum(md => Convert.ToDouble(md.varvalue)) };
我收到错误 LINQ to Entities 无法识别方法 Double ToDouble(系统字符串)。
基于这个SO question,我在我的 EDMX 模型中添加了一个 DefiningExpression,并在我的数据模型的部分类中定义了该函数并使用了以下代码:
var varsum = from md in context.masterdatas
where md.imparcid == SelectedDataSet.imparcid && md.varname == t.VarName
group md by md.varname into g
select new { varname = g.Key, SummedAmt = g.Sum(md => context.ParseDouble(md.varvalue)) };
现在我收到一个错误,即 ParseDouble 函数无法转换为 LINQ 到实体存储表达式。
我真正想做的就是让这个 SQL 语句运行:
SELECT [varname]
,[vartype]
,Sum(CASE WHEN Isnumeric([varvalue])=1 THEN cast([varvalue] as float) Else 0 END)
FROM [masterdata]
Group by varname, imparcid, vartype
Having imparcid=25 AND varname = 'S2CMT8B'
我不知道完成这项工作的最佳方法。