我有一个搜索方法,如下所示:
public IEnumerable<Result> Search(string searchText)
{
return _context.Person.Where(x => x.Contains(searchText));
}
我希望能够在searchText
为null/empty的情况下调用此函数,并取回所有记录。
我尝试过,但没有运气:
return _context.Person.Where(x => x.Contains(searchText ?? ""));
除了将其分解为两个步骤并在将其应用于查询之前在if语句中检查searchString
之外,还有其他方法可以实现这一点吗?
_context.Person.Where(x => string.IsNullOrEmpty(searchText) ? true : x.Contains(searchText));
public IEnumerable<Result> Search(string searchText)
{
if(string.IsNullOrEmpty(searchText))
return _context.Person;
else
return _context.Person.Where(x => x.Contains(searchText));
}
我尝试了所有的解决方案,下面的解决方案对我有效
query = query.Where(e => e.CategoryType.HasValue && categoryTypes.Contains(e.CategoryType.Value));
发布
你可以这样做:
return _context.Person.Where(x =>
string.IsNullOrEmpty(searchText) ||
x.Contains(searchText)
);
这是一种我经常使用的模式,当我有参数时,我只想在它们设置好的情况下应用它们。
还有一种效率较低的方法。。。不确定这在语义上是否正确,但你明白了。。。
return _context.Person.Where((x, index) => x.Contains(searchText ?? x[index]));
return _context.Person.Where(x =>string.IsNullOrEmpty(searchText) ? true : x.Contains(searchText));
或
public IEnumerable<Result> Search(string searchText)
{
return string.IsNullOrEmpty(searchText) ? _context.Person : _context.Person.Where(x => x.Contains(searchText));
}
假设Person
是一个类,Contains
似乎是这个类的方法。像Where(x => x.Contains(searchText))
或Where(x => string.IsNullOrEmpty(searchText) || x.Contains(searchText))
这样的表达式(其中x是Person(根本不能与LINQ to Entities一起使用,即使使用像…这样的简单类也是如此。。。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool Contains(string searchText)
{
return Name.Contains(searchText);
}
}
它将抛出一个异常,因为LINQ to Entities无法将此方法转换为存储表达式。Where(x => string.IsNullOrEmpty(searchText) || x.Name.Contains(searchText))
也可以。