我有一个搜索方法,如下所示:
public IEnumerable<Result> Search(string searchText)
{
return _context.Person.Where(x => x.Contains(searchText));
}
我希望能够在searchText
为空/空的情况下调用此函数并获取所有记录。
我试过这个没有运气:
return _context.Person.Where(x => x.Contains(searchText ?? ""));
还有另一种方法可以实现这一点,除了将其分解为两个步骤并在将if语句应用于查询之前在if语句中检查searchString
吗?
答案 0 :(得分:4)
_context.Person.Where(x => string.IsNullOrEmpty(searchText) ? true : x.Contains(searchText));
答案 1 :(得分:4)
public IEnumerable<Result> Search(string searchText)
{
if(string.IsNullOrEmpty(searchText))
return _context.Person;
else
return _context.Person.Where(x => x.Contains(searchText));
}
答案 2 :(得分:0)
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));
}
答案 3 :(得分:0)
你可以这样做:
return _context.Person.Where(x =>
string.IsNullOrEmpty(searchText) ||
x.Contains(searchText)
);
这是一个我使用的模式,当我有参数时我只想设置它们。
答案 4 :(得分:0)
效率较低的方式......不确定这是否在语义上是正确的,但你明白了......
return _context.Person.Where((x, index) => x.Contains(searchText ?? x[index]));
答案 5 :(得分:0)
假设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))
会起作用。
答案 6 :(得分:0)
我尝试了所有解决方案,而下面的解决方案对我有用
query = query.Where(e => e.CategoryType.HasValue && categoryTypes.Contains(e.CategoryType.Value));