0

我正在尝试在我的项目中使用搜索功能。

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

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

你可以帮帮我吗?

谢谢。

4

3 回答 3

2

您不能使用无法转换为 SQL 的 C# 函数,例如.ToString(). 如果您的表不是很大,您可以使用 LINQ to Objects 来代替.ToList()之前调用Where

product = product.ToList().Where(a => a.model.ToUpper().Contains(searchString.ToUpper())
                                   || Convert.ToInt32(a.displaySize).ToString().Contains(searchString));

编辑:

您可以使用SqlFunctions命名空间中的函数。该函数可以很容易地转换为 SQL。

于 2012-04-13T14:26:36.277 回答
1

您可以尝试将您的字符串值(查询参数)转换为小数并进行反向比较。

于 2012-04-13T14:27:09.210 回答
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。

于 2012-04-13T14:29:41.607 回答