1

10 進数値を文字列に変換しようとしています。

私のコーディングはこれです:

public ActionResult Search(string searchString)
    {
    product = product.Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
                               || a.Category.name.ToUpper().Contains(searchString.ToUpper()) 
                               || SqlFunctions.StringConvert((decimal)a.displaySize).Contains(searchString));
    return View(product.ToList());
    }

searchString の値が 10 進数ではなく '5' の場合、商品リストが表示されます。ただし、searchString の値が「5.5」の場合、商品リストは表示されません。

本当の理由はわかりません..

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

どうもありがとう。

4

2 に答える 2

2

SQL Server で大文字と小文字を区別しない照合を使用している場合 (これが既定です)、ToUpper は必要ありません。Contains が実際に必要なものであるとは思えません。おそらく次のようなものが必要です。

public ActionResult Search(string searchString) 
{
    decimal d = 0;
    bool isDecimal = decimal.TryParse(searchString, out d);
    product = product.Where(a => a.model.Contains(searchString) 
                           || a.Category.name.Contains(searchString)  
                           || (isDecimal && a.displaySize == d) ); 
    return View(product.ToList()); 
} 

また、モデルまたはカテゴリに数字が含まれている場合に何が起こるかを考えてみてください。検索すると結果が返されます..おそらくそれで問題ありません。指摘するだけです。

于 2012-04-13T15:21:36.837 に答える
1

searchStringおそらく小数に変換する方が簡単でしょう。これを試してください:

public ActionResult Search(string searchString)
{
    var searchVal = decimal.Parse(searchString);

    product = product.Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
                           || a.Category.name.ToUpper().Contains(searchString.ToUpper()) 
                           || a.displaySize == searchVal);
    return View(product.ToList());
}

どこから来ているTryParseかに応じて、型安全性を確保するために代わりに使用したい場合がありますsearchString

于 2012-04-13T15:18:34.210 に答える