首页 > 解决方案 > 过滤器在我的 ASP.NET Core 存储库中不起作用

问题描述

我在一个类中有这些参数:

public class UserParams
{
    public string Gender {get; set;}
    public int MinAge {get; set;} = 1;
    public int MaxAge {get; set;} = 19;
}

查询在存储库中完成,如下所示。第一个是查询孩子的性别或性别,第二个是查询孩子的性别或性别

var query =  _context.Children.AsQueryable();
query = query.Where(c => c.Sex == userParams.Gender);

var minchildDob = DateTime.Today.AddYears(-userParams.MaxAge - 1);
var maxchildDob = DateTime.Today.AddYears(-userParams.MinAge);

query = query.Where(u => u.DateOfBirth >= minchildDob && u.DateOfBirth <= maxchildDob);
return await PagedList<Child>.CreateAsync(query.AsNoTracking(), userParams.PageNumber, userParams.PageSize);

性别过滤器返回空的子数组,并且 minchildDob 和 maxchildDob 也不起作用

标签: entity-frameworkasp.net-corefilter

解决方案


if (!string.IsNullOrEmpty(temp.Gender))
{
    all = all.Where(u => new[] { "men", "women" }.Contains(u.sex));
    //all = all.Where(t => t.sex == temp.Gender);
}

========================更新=======================

 var temp = new UserParams();
    temp.Gender = "men";
    var minchildDob = DateTime.Today.AddYears(-temp.MaxAge - 1);
    var maxchildDob = DateTime.Today.AddYears(-temp.MinAge);
    
    IEnumerable<Table> all = from m in _context.data
                                        select m;
    _logger.LogError("all data");
    foreach (var item in all)
    {
         _logger.LogError(item.name);
    }
                _logger.LogError("============================================");
    if (!string.IsNullOrEmpty(temp.Gender)) { 
         all = all.Where(t => t.sex == temp.Gender);
    }
    _logger.LogError("filter gender");
    foreach (var item in all) {
         _logger.LogError(item.name);
    }
                _logger.LogError("============================================");
    if (temp.MaxAge > 0) {
         all = all.Where(t => t.birthday >= minchildDob && t.birthday <= maxchildDob);
    }
    _logger.LogError("filter age");
    foreach (var item in all)
    {
        _logger.LogError(item.name);
    }
                _logger.LogError("============================================");

在此处输入图像描述


推荐阅读