gpt4 book ai didi

c# - 具有多个where参数的linq to sql查询

转载 作者:可可西里 更新时间:2023-11-01 08:18:27 27 4
gpt4 key购买 nike

我目前正在使用 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();

现在我想过滤我的搜索输入。但是,用户可以决定填写尽可能多的搜索字段。他可以决定使用姓名和街道,或姓名、街道和省份,或...

我能找到的唯一真正的解决方案是使我的查询和IQueryable检查一个字段是否已经用if填充,然后使用.Where 更新查询。由于这目前会给出 m 5 个查询,我想知道是否有更好的解决方案,我在这里遗漏了。

谢谢你帮助我。

最佳答案

如果我理解正确的话。你可能想要这样的东西:

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();

当您添加 where 语句以及执行 SQL 将执行的 ToList() 时,您将拥有一个 IQueryable

更新

回答 Luis Hernández 的评论。这就是它的工作原理。在这种情况下,当您从模型中选择时,集合类型是 IQueryable。这意味着它尚未针对数据库执行。要执行查询,您需要应用一些 final方法。告诉 linq 它实际上会进行数据库调用。这些例如

ToList()
FirstOrDefault()
SingleOrDefault()
Single()
First()
ToDictionary()

因此,当我们在不使用 ToList() 的情况下附加 Where 子句时。没有执行查询。

请尝试在LinqPad中查询

关于c# - 具有多个where参数的linq to sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com