【发布时间】:2021-10-29 07:10:17
【问题描述】:
我的存储库中有一个获取列表的方法,该方法有一个这样的类:
Public Class FilterDTO{
public string City { get; set; }
public string Country { get; set; }
public DateTime InitDate { get; set; }
public DateTime EndDate { get; set; }
public Guid UserId { get; set; }
}
进行查询,但并非总是所有属性都有值,如果我想按日期过滤,我发送 DateTime 属性的值,但如果我想按 City 过滤,我只发送 City 属性,所以有时一些属性为空并且查询不返回任何内容,这是我在存储库中的方法:
public async Task<List<ListUser>> getListUserByFilter(FilterDTO filter)
{
var listUsers = await _context.ListUser.Where(lu => lu.UserId == filter.UserId
&& lu.City == filter.City
&& lu.Country == filter.Country
).ToListAsync();
return listUsers;
}
在我的数据库中,有 9 个带有此 City、Country 和 UserId 的寄存器,但查询没有返回任何内容,因为我认为其他属性为 null,所以我的问题是如何进行查询以返回这 9 个寄存器。
【问题讨论】:
-
您是否尝试过包括城市、国家/地区等?
-
请注意
DateTime不能为空。你需要DateTime?。 -
你可以拆分表达式,所以你有一个
IQuerable。然后你可以做类似if( !string.IsNullOrEmpty(filter.City)) { query = query.Where( lu => lu.City == filter.City ); } ... -
@Fildor 我只需要输入“?”在 DateTime 之后?,但如果我想按日期获取其他属性将为 null,所以查询将起作用?
-
不,不是这样。照原样,如果您执行
new FilterDTO(),它将其 DateTime 属性设置为default(DateTime),notnull。所以,如果你用这些查询,你最终会得到一个像 " WHERE Start >= X AND End DateTime?来区分“无价值”,所以可以省略where子句的那部分。
标签: c# linq entity-framework-core .net-5