who*_*res 12 c# sql linq asp.net-mvc entity-framework
我目前正在使用实体框架在ASP.NET MVC 4中编写搜索功能.但是,我遇到了障碍,我只能找到"坏"的解决方案.
我的搜索功能返回一个由4个参数组成的模型:
String Name
String Street
String Code
String Province
List<Query> query = (from t in Model select t).ToList();
Run Code Online (Sandbox Code Playgroud)
现在我想过滤我的搜索输入.但是,用户可以决定填写尽可能多的搜索字段.他可以决定使用姓名和街道,或姓名,街道和省份,或......
我能找到的唯一真正的解决方案包括进行查询并IQueryable检查字段是否已填充if,然后使用a .Where来更新查询.由于目前这将提供m 5个查询,我想知道是否有更好的解决方案,我在这里缺少.
谢谢你的帮助.
Ari*_*ion 22
如果我理解你的正确.你可能想要这样的东西:
string Name;
string Street;
string Code;
string Province;
var query=(from t in Model select t);
if(Name!=null)
{
query=query.Where (q =>q.Name==Name);
}
if(Street!=null)
{
query=query.Where (q =>q.Street==Street);
}
if(Code!=null)
{
query=query.Where (q =>q.Code==Code);
}
if(Province!=null)
{
query=query.Where (q =>q.Province==Province);
}
List<Query> ls = query.ToList();
Run Code Online (Sandbox Code Playgroud)
你将有一个IQueryable添加where语句的时间,当你执行时ToList(),sql将执行.
更新
回答路易斯·埃尔南德斯的评论.这就是它的工作原理.在这种情况下,从模型中选择集合类型时IQueryable.这意味着它尚未针对数据库执行.要执行查询,您需要应用一些最终的metod.告诉linq它实际上会进行数据库调用.这些是例如
ToList()
FirstOrDefault()
SingleOrDefault()
Single()
First()
ToDictionary()
Run Code Online (Sandbox Code Playgroud)
所以当我们在不使用的情况下附加Where子句时ToList().没有执行查询.
请在LinqPad中尝试查询
| 归档时间: |
|
| 查看次数: |
18036 次 |
| 最近记录: |