c# - 如何在搜索/过滤数据期间处理空字段?
问题描述
我正在努力使用数据搜索算法,该算法必须使用多个字段从数据库中检索一些数据。每个文本框提供一个给定的参数,存储在数据库中,由实体框架访问。当我向所有字段输入数据时它正在工作,但如果我将任何字段留空,它不会检索任何记录。我的问题是 - 如何处理空字段。如果我留下任何没有数据的字段,它不应该在从数据库中选择时考虑这个参数,而是根据非空参数选择数据。
这是我到目前为止创建的:
[HttpPost]
public ViewResult Search(string brand, string model, int? manufactDateMin,
int? manufactDateMax, int? priceMin, int? priceMax, int? engineCapMin,
int? engineCapMax, string engineType, int page = 1)
{
IEnumerable<Car> foundItems = repository.Cars
.Where(c => brand == null || c.Brand == brand)
.Where(c => model == null || c.Model == model)
.Where(c => manufactDateMin == null || manufactDateMax == null || (c.ManufactDate.Year >= manufactDateMin) && (c.ManufactDate.Year < manufactDateMax))
.Where(c => priceMin == null || priceMax == null || (c.Price >= priceMin) && (c.Price < priceMax))
.Where(c => engineCapMin == null || engineCapMax == null || (c.EngineCapacity >= engineCapMin) && (c.EngineCapacity < engineCapMax))
.Where(c => engineType == null || c.EngineType == engineType)
.OrderBy(c => c.Id)
.Skip(PageSize * (page - 1))
.Take(PageSize);
CarListViewModel VMmodel = new CarListViewModel
{
Cars = foundItems,
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = foundItems.Count(),
},
CarType = null
};
return View("List", VMmodel);
}
解决方案
我认为你应该像这样分开做
IQueryable<Car> query = repository.Cars;
if (!string.IsNullOrEmpty(brand))
{
query = query.Where(x => x.Brand == brand);
}
if (!string.IsNullOrEmpty(model ))
{
query = query.Where(x => x.Model == model );
}
毕竟你把take和skyp放在一起,它更快,更易读
推荐阅读
- php - 以下哪一项是从 PHP 类中的函数获取值的最佳实践?
- sql-server - SSIS 数据类型转换问题
- typescript - 如何在打字稿中定义函数类型,其变量参数名称仅限于某些接口的键
- javascript - div 元素的屏幕截图并发送到 aws s3 存储
- python - 强制子进程使用 Python 3
- uwp - 如何将 IntPtr 从 C# 传递到 C++
- sql-server - 是否可以在唯一约束中忽略 null?
- python - 使用 Python / Pandas 从大型 csv 文件获取相关矩阵的问题
- python - Jupyter notebook 空闲锁定红移表
- openid - 将我自己的外部身份提供者添加到 Keycloak 会产生“来自令牌的错误受众”。