私の問題は、Where
ステートメントが Entity Framework で正しく機能しないことです。
データベース内の 1 つの行を定義するプロパティを持つクラスがint
あります。long
これらのプロパティを呼び出しましょうId
&Parent
public class Update
{
public long Id { get; set; }
public int Parent { get; set; }
}
次に、それらの更新のリストがあり、各データベース行がリスト内の更新 (両方のプロパティ) と一致する必要があります。
私が試したことは、これらの更新を匿名型に変換し、完全に一致する行のみを見つけようとすることです: int と long の両方が同じです。
// anon type
var mapping = updates.Select(o => new { id = o.Id, parent = o.Parent}).ToList();
var results = from fa in Uvw_MyTable
// PROBLEMATIC WHERE
where mapping.Contains(new { id = fa.Id, parent = fa.Parent })
select new { fa };
しかし、残念ながら、私は常にエラーを受け取ります:タイプ「匿名タイプ」の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。
私もAny
このように使用しようとしました:
where mapping.Any(a => fa.Id == a.id && fa.Parent == a.parent)
しかし、同じエラーが発生します。オブジェクトのリストを使用しても同じことが起こりUpdate
ます。タイプ 'xxx.Update' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。
この問題を解決する方法はありますか?
アップデート
このまったく同じクエリは、LINQPad 4 で非常にうまく機能します。
更新 2
問題はこの質問に関連していますか?
アップデート 3
Maarten が指摘したように、この問題には、異なるアプローチを使用して同じ結果を再現するソリューションが必要です。