带有Where条件的MVC LINQ

时间:2012-04-13 14:23:49

标签: c# asp.net-mvc asp.net-mvc-3 linq where

我正在尝试在我的项目中创建搜索功能。

目前,我想将十进制值转换为字符串,以便与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'。

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

你能帮帮我吗?

感谢。

3 个答案:

答案 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。