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()' 方法'.

如何将十进制值与字符串值进行比较?

你能帮我吗?

谢谢。

MVC LINQ with Where condition

不能像 .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。