2012-04-13 57 views
1

我想將十進制值轉換爲字符串。MVC3 SqlFunctions.StringConvert方法

我的編碼是這樣的:

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()); 
    } 

搜索字符串當值是「5」,而不是十進制值,它會顯示產品列表。但是,如果searchString值爲'5.5',則不會顯示產品列表。

我不知道爲什麼,真的..

你能幫助我嗎?

非常感謝。

+0

什麼數據類型是'a.displaySize'? – 2012-04-13 15:13:30

+0

這是十進制值。當我把'10.5'的東西,產品列表什麼都沒找到。我不知道爲什麼。 – wholee1 2012-04-13 15:14:52

回答

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

+0

如果您沒有注意到,他對所有值都使用相同的搜索字符串,因此幾乎可以保證大部分時間Parse都會拋出異常。 – 2012-04-13 15:22:33

+0

哦..那就更簡單了!非常感謝!羅裏! – wholee1 2012-04-13 15:24:03

2

你不如果您在SQL Server中使用不區分大小寫的通用語言(這是默認設置),則不需要ToUpper。我懷疑包含的是你真正想要的,你可能想是這樣的:

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()); 
} 

另外,考慮當一個模型或類別包含了一些發生了什麼,你的搜索將返回一個結果..也許這是確定。只是指出來。

+0

非常感謝! – wholee1 2012-04-13 15:26:27