MVC LINQ with Where condition
本文关键字:condition Where with LINQ MVC | 更新日期: 2023-09-27 18:31:13
我正在尝试在我的项目中制作搜索功能。
目前,我想将十进制值转换为字符串以与搜索字符串进行比较。
当我这样说时:
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()' 方法'.
如何将十进制值与字符串值进行比较?
你能帮我吗?
谢谢。
不能像 .ToString()
那样使用无法转换为 SQL 的 C# 函数。如果表不是很大,则可以改用 LINQ to Objects,方法是在Where
之前调用.ToList()
product = product.ToList().Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
|| Convert.ToInt32(a.displaySize).ToString().Contains(searchString));
编辑:
您可以使用SqlFunctions
命名空间中的函数。 该函数可以很容易地转换为 SQL。
您可以尝试将字符串值(查询参数)转换为小数并进行比较。
看起来您正在寻找两种不同的东西。我会在 ||.如果您正在寻找 a.model 是什么,请转到一个方法,如果您正在寻找 int 值,请转到另一个方法并将搜索字符串转换为 linq 语句之前的 int U。 该方法如下所示:
int searchInt;
if(int.TryParse(searchString, out searchInt))
{
product = product.Where(a => a.displaySize == searchInt);
}
你必须这样做,因为SQL没有ToString()方法...所以 LINQ 真的不知道如何处理它。请记住,这一切都会转换为 SQL。