1

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

我的编码是这样的:

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',则不会显示产品列表。

我真的不知道为什么。。

你可以帮帮我吗?

非常感谢。

4

2 回答 2

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

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

于 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 回答