1

エラーが発生しました:

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

コードの一部:

plist= plist.Where(p => Convert.ToInt(p.Period) >= syslockPeriod);

p.期間の例:201206

pList はIQueryableです。p.Period は文字列型です。sysLockPeriod は int です。

修正方法は?

4

3 に答える 3

0

エンティティへの LINQ は、SQL 命令に変換しようとします。これは、変換できる既知の方法Convert.ToInt32()の 1 つではないため、そのエラーが生成されます。

いくつかの回避策がありますが、それらすべてについてコードを変更する必要があります。あなたができることを見てみましょう(私にとっては好みの順に)。

  • Periodプロパティ/フィールドを適切な型に変換します。整数型の場合、DBに文字列として保存するのはなぜですか?
  • 変換を実行し、計算されたプロパティ (またはビュー) を使用する関数を (データベース内に) 作成します。LINQ to Entities には、適切な型の真の列 (変換する必要はありません) または変換を行うために (SQL 側で) 呼び出す関数が含まれるようになりました。カスタム データベース関数を呼び出す方法については、MSDN のこの例を参照してください。
  • with beforeに変換IQueryableすると、句はデータベースではなくローカルで実行されます (リストがかなり大きい場合、これはひどいことになるかもしれません)。IListToList()Where()where
于 2012-07-09T07:26:13.803 に答える
0

syslockPeriodこれを LINQ クエリの外部の文字列に変換しないでください。エラーを取り除くのに役立ちますが (「Convert.ToInt」も削除すると)、間違った結果が返されます。これにより、「真の」結果が得られます: "12" < "2".

正しい解決策は、その文字列列「期間」を整数列に変換することです。

于 2012-07-09T07:32:16.567 に答える