我正在尝试将十进制值转换为字符串。
我的编码是:
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”,则不会显示产品列表。
我不知道为什么真的......
你可以帮帮我吗?非常感谢。
答案 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
的来源