web-dev-qa-db-ja.com

LINQ to Entitiesはメソッド 'Int32 Parse(System.String)'メソッドを認識せず、このメソッドはストア式に変換できません

私はEntity Frameworkを使用しており、varを取得してそれをデータベースのiintに変換し直すコード行があります。

var record = context.enrollments.SingleOrDefault
  (row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID));

実行しようとすると、rhisエラーが発生します。 「LINQ to Entitiesはメソッド 'Int32 Parse(System.String)'メソッドを認識せず、このメソッドはストア式に変換できません。」

私もこれを試しました

 var record = context.enrollments.FirstOrDefault
  (row => row.userId == Convert.ToInt32(UserID) 
  && row.classId == Convert.ToInt32(ClassID));

受け取ったのはこのエラーメッセージだけです。「LINQ to Entitiesはメソッド 'Int32 ToInt32(System.String)'メソッドを認識せず、このメソッドはストア式に変換できません。

最後に私もこれを試しましたが、これは珍しいことですが、過去に同様の状況で機能しました。

var record = context.enrollments.SingleOrDefault
  (row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID) 
  && row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID));

このエラーが発生します。ご覧のとおり、私はさまざまなことを試しましたが、何も機能していません。

11
SinceForever

Linq to Entityでは、queryでサポートされているproviderのメソッドを使用してexpression treeに変換し、Data Base側で実行する必要があります。

すべてのプロバイダーは、デフォルトでCanonical FunctionsRead More Here )と呼ばれるいくつかのメソッドをサポートする必要があります。また、user defined functionおよびstored procedureedm functionsとして定義することもできます。 linq queryRead More Here )および( Here )で使用します。

さらに、プロバイダーによってサポートされ、_ EntityFunctions および SqlFunctions にあるexpression treeに変換できるメソッドを使用できます。

最後に、質問については、次のように、クエリの前にUserIDClassIDを変換できます。

var UID = int.Parse(UserID);
var CID = int.Parse(ClassID);
var record = context.enrollments.SingleOrDefault
    (row => row.userId == UID && row.classId == CID);
20

これは私にとってはうまくいきます:

  var iId = int.Parse(TextBox1.Text);
 var item = db.Items.Where(p => p.ItemID == iId ).FirstOrDefault();

これを機能させるには、ラムダ式の外でテキストボックスの値を変換する必要があります。

1
John