我正在尝试在我的项目中创建搜索功能。
目前,我想将十进制值转换为字符串,以便与searchString进行比较。
当我这样说时:
public ActionResult Search(string searchString)
{
var product = from a in _db.Product.Include(a => a.Category)
select a;
if (!String.IsNullOrEmpty(searchString))
{
product = product.Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
|| Convert.ToInt32(a.displaySize).ToString().Contains(searchString));
}
return View(product.ToList());
}
有错误,
'LINQ to Entities无法识别方法'System.String ToString()'method'。
如何将十进制值与字符串值进行比较?
你能帮帮我吗?
感谢。
答案 0 :(得分:2)
您不能使用无法转换为SQL的C#函数,如.ToString()
。如果您的表格不是很大,您可以在.ToList()
Where
来使用LINQ to Objects
product = product.ToList().Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
|| Convert.ToInt32(a.displaySize).ToString().Contains(searchString));
修改强>
您可以使用SqlFunctions
命名空间中的函数。这些函数可以很容易地转换为SQL。
答案 1 :(得分:1)
您可以尝试将字符串值(查询参数)转换为小数并比较反向。
答案 2 :(得分:1)
看起来你正在寻找两种不同的东西。我会将这个linq语句拆分为||。如果你正在寻找a.model是什么,转到一个方法,如果你正在寻找int值转到另一个方法并将搜索字符串转换为一个int在LINQ语句之前。该方法需要类似:
int searchInt;
if(int.TryParse(searchString, out searchInt))
{
product = product.Where(a => a.displaySize == searchInt);
}
你必须这样做,因为SQL没有ToString()方法......所以LINQ并不真正知道如何处理它。请记住,这一切都会转换为SQL。