私は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));
このエラーが発生します。ご覧のとおり、私はさまざまなことを試しましたが、何も機能していません。
Linq to Entity
では、query
でサポートされているprovider
のメソッドを使用してexpression tree
に変換し、Data Base
側で実行する必要があります。
すべてのプロバイダーは、デフォルトでCanonical Functions
( Read More Here )と呼ばれるいくつかのメソッドをサポートする必要があります。また、user defined function
およびstored procedure
をedm functions
として定義することもできます。 linq query
( Read More Here )および( Here )で使用します。
さらに、プロバイダーによってサポートされ、_ EntityFunctions および SqlFunctions にあるexpression tree
に変換できるメソッドを使用できます。
最後に、質問については、次のように、クエリの前にUserID
とClassID
を変換できます。
var UID = int.Parse(UserID);
var CID = int.Parse(ClassID);
var record = context.enrollments.SingleOrDefault
(row => row.userId == UID && row.classId == CID);
これは私にとってはうまくいきます:
var iId = int.Parse(TextBox1.Text);
var item = db.Items.Where(p => p.ItemID == iId ).FirstOrDefault();
これを機能させるには、ラムダ式の外でテキストボックスの値を変換する必要があります。