linq中的关键字搜索

时间:2013-01-15 06:03:05

标签: c# linq asp.net-mvc-4

我在视图中的表单中有三个字段:

[Textfield] : Name  
[Dropdown]  : Sector  
[Dropdown]  : Country  

我的要求是通过控制器方法中的这三个关键字过滤结果,并且首先按接收日期然后按名称排序结果。

有很多可能性,例如:如果Name匹配,Sector匹配则进行过滤等。

我可以用if else或任何其他繁琐的方式来做,但我怎么能在一个语句中在LINQ中做到这一点。我需要返回一个清单。

3 个答案:

答案 0 :(得分:1)

如果只需要简单的搜索就可以发现某些列包含指定的字符串,请尝试这样的操作。

// dc is some datacontext
var query = dc.MyEntities.Where(x=> x.Name.Contains(inputName) ||
                                    x.Sector.Contains(inputSector) ||
                                    x.Contry.Contains(inputCountry))
                         .OrderBy(x=> x.receivedDate)
                         .ThenBy(x=> x.Name);
var resultList = query.ToList();

还可以根据您的需要检查(设置)数据库的排序规则以进行区分大小写(CS)或不区分大小写(CI)搜索。但是,要对CS排序规则进行不区分大小写的搜索,您需要使用ToUpper()扩展上面的代码。

x.Name.ToUpper().Contains.(inputName.ToUpper());

但要注意,它不会通过Turkey test :-) - 将和小写的上限设置为奇怪。< / p>

以下是不区分大小写.Contains(string)的有趣资源:Case insensitive 'Contains(string)'

如果您需要一些复杂的全文搜索。我会寻找:

答案 1 :(得分:0)

查看此解决方案,看看它是否有助于您实现预期目标:search keywords using linq

答案 2 :(得分:-1)

感谢所有回答我问题的人。找到了我在下面寻找的答案,并希望它能帮助别人。

http://blog.tech-cats.com/2008/01/using-optional-parameters-in-sql-server.html