MVC3 SqlFunctions.StringConvert方法

时间:2012-04-13 15:10:21

标签: asp.net-mvc-3

我正在尝试将十进制值转换为字符串。

我的编码是:

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值为'5'而不是十进制值时,将显示产品列表。但是,如果searchString值为“5.5”,则不会显示产品列表。

我不知道为什么真的......

你可以帮帮我吗?

非常感谢。

2 个答案:

答案 0 :(得分: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()); 
} 

另外,考虑当模型或类别包含数字时会发生什么,您的搜索将返回结果..也许这没关系。只是指出来。

答案 1 :(得分: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的来源