0

プロジェクトで検索機能を作ろうとしています。

現在、searchString と比較するために、10 進数値を文字列に変換したいと考えています。

私がこのように置くと:

public ActionResult Search(string searchString)
    {

        var product = from a in _db.Product.Include(a => a.Category)
                      select a;
        if (!String.IsNullOrEmpty(searchString))
        {
            product = product.Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
                               || Convert.ToInt32(a.displaySize).ToString().Contains(searchString));
        }
        return View(product.ToList());
    }

エラーがあり、

「LINQ to Entities はメソッド「System.String ToString()」メソッドを認識しません」。

10 進値と文字列値を比較するにはどうすればよいですか?

私たちを手伝ってくれますか?

ありがとう。

4

3 に答える 3

2

のように SQL に変換できない C# 関数は使用できません.ToString().ToList()前に呼び出してテーブルがそれほど大きくない場合は、代わりに LINQ to Objects を使用できます。Where

product = product.ToList().Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
                                   || Convert.ToInt32(a.displaySize).ToString().Contains(searchString));

編集:

SqlFunctions名前空間から関数を使用できます。その関数は簡単に SQL に変換できます。

于 2012-04-13T14:26:36.277 に答える
1

2 つの異なるものを検索しているようです。|| でこの linq ステートメントを分割します。a.model を探している場合は 1 つのメソッドに移動し、int 値を探している場合は別のメソッドに移動し、linq ステートメントの前に検索文字列を int に変換します。そのメソッドは次のようになります。

int searchInt;

 if(int.TryParse(searchString, out searchInt))
{

    product = product.Where(a => a.displaySize == searchInt); 
}

SQL には ToString() メソッドがないため、これを行う必要があります...そのため、LINQ は実際に何をすべきかわかりません。これはすべて SQL に変換されることに注意してください。

于 2012-04-13T14:29:41.607 に答える
1

文字列値 (クエリ パラメーター) を 10 進数に変換し、その逆を比較してみてください。

于 2012-04-13T14:27:09.210 に答える