c# - 使用 StartsWith 的 Lambda 过滤在 c# 中不起作用
问题描述
我正在使用 Lambda 表达式进行搜索。我正在搜索 3 个字段,即姓名、地址、电子邮件。我在控制器的视图中编写了以下 lambda 表达式:
return View(db.SalesPersons.Where(x => x.Name.StartsWith(search.ToUpper()) || x.Address.StartsWith(search.ToUpper()) || x.Email.StartsWith(search.ToUpper())).ToList().ToPagedList(page ?? 1, 3));
但是当我调试应用程序时,它会生成以下 sql:
SELECT
[Extent1].[IID] AS [IID],
[Extent1].[Name] AS [Name],
[Extent1].[Address] AS [Address],
[Extent1].[City] AS [City],
[Extent1].[Pin] AS [Pin],
[Extent1].[UserId] AS [UserId],
[Extent1].[Password] AS [Password],
[Extent1].[ContactNo1] AS [ContactNo1],
[Extent1].[ContactNo2] AS [ContactNo2],
[Extent1].[Email] AS [Email]
FROM [dbo].[SalesPerson] AS [Extent1]
很明显,缺少 where 原因。所以它返回所有记录而不过滤。我不确定是什么问题。有什么线索吗?
谢谢
帕塔
解决方案
砍掉 where 的另一个原因是查询的优化:
如果search
是string.Empty
然后
"your string".StartsWith(string.Empty)
总是返回真。
另一方面:
string s = null;
s.StartsWith(string.Empty);
会抛出错误。
只是为了确保您的search
变量具有适当的值,您可以执行以下操作来排除这种string.Empty
情况:
var newSearch = "hi".ToUpper();
db.SalesPersons.Where(x => x.Name.StartsWith(newSearch) ||
x.Address.StartsWith(newSearch) ||
x.Email.StartsWith(newSearch))
不帮忙?您可以尝试使用探查器,以确保这是进入数据库的实际 SQL,如果是:提交错误。
推荐阅读
- r - 如何根据 R 中先前变量的条件创建新变量?
- android - 将 Paging 3 alpha 更新为稳定导致索引问题 Android
- angular - npm i @devexpress/analytics-core 安装错误
- reactjs - 在 github 存储库上进行 React 登录是否有简单的工作?
- reactjs - 使用 react-dnd 时,如何指定 DragPreviewImage 的 HTML 属性?
- fragment - 带有navhostfragment的BottomNavigationView不显示片段,android?
- r - R中重复的数据框行
- javascript - 在 Next Js 的内部页面的 getStaticProps 函数中找不到文件路径
- python - 如何使用 Python 中的 requests 包通过 API 密钥获取 API 答案
- android - 如何在 Android 上删除弹出窗口“USB OTG”。(小米)