2012-04-13 130 views
0

我想在我的项目中进行搜索功能。MVC LINQ与哪里条件

目前,我想将十进制值转换为与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到实体无法识别方法 'System.String 的ToString()' 方法'。

如何比较十进制值和字符串值?

你能帮我吗?

谢谢。

+0

重复的问题? http://stackoverflow.com/questions/10140634/mvc-where-condition-with-search-function – 2012-04-13 14:30:06

+0

我通过'SqlFunctions.StringConvert(a.displaySize).Contains(searchString)'解决了这个问题。 – wholee1 2012-04-13 14:54:58

回答

2

您不能使用无法转换为SQL的C#函数,如.ToString()。您可以前Where

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

编辑使用LINQ对象,而不是如果你的表是不是非常大,通过调用.ToList()

您可以使用函数从SqlFunctions命名空间。该功能可以轻松转换为SQL。

+0

在一个非常大的列表中,这将会非常缓慢,因为ToList会导致linq被执行,然后你在哪里执行。 – Qpirate 2012-04-13 14:32:06

+0

我已经提到调用.ToList()的方法只适用于有少量行的表。 – 2012-04-13 14:33:07

+0

对不起,我没有看到那里。但正如你所说的,我很抱歉 – Qpirate 2012-04-13 14:35:31

1

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

1

看起来你正在寻找两种不同的东西。我会在||上分割这个linq语句。如果您正在查找任何a.model,请转到一种方法,如果您正在查找int值转到另一个方法并将搜索字符串转换为linq statment之前的int值。这种方法想是这样的:

int searchInt; 

if(int.TryParse(searchString, out searchInt)) 
{ 

    product = product.Where(a => a.displaySize == searchInt); 
} 

你必须这样做,因为SQL没有一个ToString()方法...所以LINQ并不真正知道该怎么做。请记住,这一切都转换为SQL。