gpt4 book ai didi

c# - 使用动态 where 参数对 db 进行 Linq 查询

转载 作者:太空宇宙 更新时间:2023-11-03 21:29:31 25 4
gpt4 key购买 nike

我有一张包含城市数据的表格:在搜索输入字段中,用户键入任意数量的字符,然后按下“搜索”按钮。还有另一个字段,用户可以在其中通过下拉列表输入状态。

按下搜索按钮会触发对服务器 Controller 的 ajax 调用,服务器 Controller 会接收名称的起始字符和状态的两个字符。

Controller 应返回名称以提供的字符开头的城市列表。如果该州通过,则该列表应仅包含名称以提供的字符开头且位于该州的城市。

如果状态未通过,则无论状态如何,都会返回所有匹配的城市。

我找不到编写单个 Linq 语句的方法,因为我不知道如何编写状态查询部分:目前我这样做:

public ActionResult selectCity(string searchString, string stateCode)
{
List<CityViewModel> mylist = new List<CityViewModel>();
IQueryable<City> mycities = null;

if (stateCode == "")
{
mylist = (from c in db.Cities
where c.name.StartsWith(searchString)
select c);
}
else
{
mylist = (from c in db.Cities
where ((c.name.StartsWith(searchString)) &&
(c.stateCode == stateCode))
select c);
}

<snip>
.....
.....
</snip>

return PartialView("_selComune",elenco);
}

我无法相信没有一种方法可以通过单个查询来做到这一点。

最佳答案

是的,有。

您想:如果stateCode为空或匹配 City.stateCode然后将其包含在结果中 City.Name必须始终以 searchString 开头.在代码中:

var mylist = 
from c in db.Cities
where
c.name.StartsWith(searchString)
&& (stateCode == "" || c.stateCode == stateCode)
select c;

大致等同于此 SQL(假设提供了具有正确语法的参数):

SELECT * FROM Cities
WHERE name LIKE @searchString AND (@stateCode = '' OR stateCode = @stateCode)

如果始终满足第一个条件(只需检查查询执行计划),SQL Server 将优化第二个比较。


<子>我认为这是编写代码示例的错字,但是 myList不是 List<City>除非您还添加 ToList()到您的 LINQ 查询。

关于c# - 使用动态 where 参数对 db 进行 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25023087/

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