LINQ to Entities を初めて使用しています。
私のデータ ストアには、他の特定のフィールドによっては整数になることが多い文字列フィールドがあります。このデータベースの構造を変更できません。
EF で問題となっているテーブルは部品です。
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(system string) を認識しないというエラーが表示されます。
このSO の質問に基づいて、DefiningExpression を EDMX モデルに追加し、データモデルの部分クラスで関数を定義して、次のコードを使用しました。
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 to entity store 式に変換できないというエラーが表示されます。
私が実際にやろうとしているのは、この 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'
これを行うための最良の方法について途方に暮れています。