c# - 如何根据所有可变参数进行搜索
问题描述
我正在尝试编写一个搜索功能,其中用户可以根据 Id、UserName 和状态进行搜索。这些搜索过滤器对应的数据在不同的表中,所以我必须对这些表进行连接。
当然,用户可以根据 Id 和 UserName 或 UserName 和 status 以及可以从这 3 个过滤器中考虑的所有组合进行搜索。
我所做的是制作不同的功能来解决这些组合。
有没有一种方法可以通过使用 linq 的一种方法来实现。我试图避免 if-else 和 switch。
我已经研究 过使用 Linq 和 LINQ动态添加条件连接- 加入动态查询
这是我根据所有参数搜索的代码
public List<Application> GetApplication(int? applicationId, string userName, string status)
{
_applicationlist.Clear();
if (applicationId != 0 && !string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(status))
{
var application = (from a in _targetDbContext.DbSet<ApplicationEntity>()
join u in _targetDbContext.DbSet<UserEntity>() on a.InDraftPersonnel equals GetUserID(userName)
join v in _targetDbContext.DbSet<ApplicationVersionEntity>() on a.Id equals v.ApplicationId
join s in _targetDbContext.DbSet<ApplicationStatusEntity>() on v.VersionStatus equals s.Id
where a.Id.Equals(applicationId)
where u.UserName.Equals(userName)
where s.StatusName.Equals(status)
select (new Application
{
Id = a.Id,
AppName = a.AppName,
CreatedBy = a.CreatedBy,
CreatedOn = a.CreatedOn
})).FirstOrDefault();
_applicationlist.Add(application);
}
return _applicationlist;
}
问题是我不确定用户是否会只使用一个参数进行搜索。
任何帮助,将不胜感激。
解决方案
删除 if 并尝试以下操作:
where (!applicationid.HasValue || applicationid == 0 || a.Id.Equals(applicationId)) &&
(string.IsNullOrWhiteSpace(userName) || u.UserName.Equals(userName)) &&
(string.IsNullOrWhiteSpace(status) || s.StatusName.Equals(status))
使用此 where 子句,所有参数都是可选的,如果其中一个为 null 或为空,则这些参数不会影响查询结果,并且支持所有组合。
推荐阅读
- python - 从 C++/Qt 程序在 Windows 中运行 Anaconda 脚本
- swift - 解码可为空的异构字典
- vue.js - 无法从服务器获取数据到 NuxtJS 存储
- javascript - 如何评估表达式?
- homebrew - Linux 上的 brew 实用程序:从瓶中倒出的东西与从源代码构建的东西有什么区别?
- sql - 多表选择,限制结果数量
- c# - Winform:如何知道 CheckBox 是否已从代码或 UI 中检查
- javascript - 如何将 json 服务器与 reactjs 一起使用?
- android - 错误代码 101 --no-packager 与 Visual Studio Code 中的 React Native 工具包
- html - 在 [ngStyle] 中使用 calc() 设置宽度,角度变量不起作用