首页 > 解决方案 > 如何根据所有可变参数进行搜索

问题描述

我正在尝试编写一个搜索功能,其中用户可以根据 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;
}

问题是我不确定用户是否会只使用一个参数进行搜索。

任何帮助,将不胜感激。

标签: c#linq

解决方案


删除 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 或为空,则这些参数不会影响查询结果,并且支持所有组合。


推荐阅读