我正在编写搜索我们正在构建的 MVC 应用程序的代码,问题是我想通过对象的各种属性进行搜索。在这种特殊情况下,这是我的预期行为:
- 如果两个参数都为 null 或为空,则全部返回。
- 如果任何参数具有值,请使用包含选择所有按该参数过滤的参数。
这就是我正在做的事情:
var model = _svc.GetList(q => q.Name == (string.IsNullOrEmpty(entity.Name) ? q.Name : entity.Name) &&
q.Description == (string.IsNullOrEmpty(entity.Description) ? q.Description : entity.Description));
如果两个字段都为 null 或为空,则返回所有元素,或者返回与Name AND/OR Description完全匹配的任何元素。
这里的事情是我希望它表现得像Contains
.
我已经设法让这个在一个领域工作:
var model = _svc.GetList(q => (string.IsNullOrEmpty(entity.Name) ||
q.Name.ToLower().Contains(entity.Name.ToLower()))).ToList();
但是当我添加描述字段时,它会抛出 NullReferenceException: Object reference not set to an instance of an object。
只是为了检查我已经尝试过,它也没有工作:
var model = (from q in _svc.GetList()
where (string.IsNullOrEmpty(module.Name) ||
q.Name.ToLower().Contains(module.Name.ToLower()))
select q).ToList();
model = (from q in model
where (string.IsNullOrEmpty(module.Description) ||
q.Description.ToLower().Contains(module.Description.ToLower()))
select q).ToList();