具有Contains和Nullable值的Linq查询



我有一个搜索方法,如下所示:

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))也可以。

相关内容

  • 没有找到相关文章