【发布时间】:2019-08-29 13:58:19
【问题描述】:
我正在尝试编写一个搜索功能,其中用户可以根据 Id、UserName 和状态进行搜索。这些搜索过滤器对应的数据在不同的表中,所以我必须对这些表进行连接。
当然,用户可以根据 Id 和 UserName 或 UserName 和 status 以及可以从这 3 个过滤器中考虑的所有组合进行搜索。
我所做的是使用不同的函数来处理这些组合。
有没有一种方法可以通过使用 linq 的一种方法来实现。我试图避免 if-else 和 switch。
我已经调查过了 Add Conditional Join Dynamically with Linq 和 LINQ - Joins in a dynamic query
这是我根据所有参数搜索的代码
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;
}
问题是我不确定用户是否会只使用一个参数进行搜索。
任何帮助将不胜感激。
【问题讨论】: