27

私のページには次のコードがあります:

var myVar= Entity.SetName
                 .Where(p => int.Parse(p.ID) >= start &&
                  int.Parse(p.ID) <= end);

startとendはintですが、p.IDは文字列です。したがって、p.IDをintに変換する必要があります。しかし、次のエラーが発生します:

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

問題はどこだ??

4

6 に答える 6

22

まず、データベースの設計を確認することを強くお勧めしIDますstringIDDB タイプを に変更することを検討しintます。変換すると、この問題を取り除くことができます

Int32.Parse()表示されるエラーは、EF がメソッドを SQLに変換する方法を認識していないことを意味します。基本的に、それに対処する方法は2つあります。

linq の外側でエンティティとの比較を行います。

var myVar= Entity.SetName.AsEnumerable()
                 .Where(p => int.Parse(p.ID) >= start &&
                  int.Parse(p.ID) <= end);

ただし、条件を適用する前に DB から結果セット全体を読み取るため、これはお勧めできません。where

または、SO に関するこの投稿で説明されているように、カスタム モデル定義関数を作成します。

EF 4.0 または Entity Framework で文字列を Int に変換する: CSDL/MSL はどこで拡張しますか?

于 2013-01-28T09:29:00.650 に答える
3

最初に変換してからint、その変数名を渡します

int catgry = Convert.ToInt32(customercategory.OWNERSHIP_TYPE);
var customerCateg = (from d in _db.tbl_SIL_CUSTOMER_CATEGORY_MST
    .Where(d => d.CAT_ID == catgry) select d.CAT_TYPE).SingleOrDefault();
于 2015-02-06T10:23:27.067 に答える
-1

効率的ではありませんが、すべての行を読み込んでから、LINQ to Objects を使用できるはずです。

var myVar= Entity.SetName.ToList()
                 .Where(p => int.Parse(p.ID) >= start &&
                  int.Parse(p.ID) <= end);
于 2013-01-28T09:25:47.417 に答える