2011-04-08 96 views
2

我对搜索的方法,该方法是这样的:LINQ查询与包含和空值

public IEnumerable<Result> Search(string searchText) 
{ 

    return _context.Person.Where(x => x.Contains(searchText)); 
} 

我希望能够调用此函数searchText被空/空,并得到所有的记录回。

我已经没有运气尝试这样做:

return _context.Person.Where(x => x.Contains(searchText ?? "")); 

有另一种方式来做到这一点,除了它应用到查询之前,将其分成两个步骤,并检查searchString在if语句?

+0

相关(但不是你的具体问题在这里):http://stackoverflow.com/questions/682429/how-can-i-query-for-null-values-in-entity-framework – 2011-04-08 14:33:42

+0

是'Contains' a你的'Person'类的方法?哪些搜索FirstName和LastName等?你甚至如何获得原始版本'_context.Person.Where(x => x.Contains(searchText))'与LINQ to Entities一起工作?你能展示这种方法吗? – Slauma 2011-04-08 16:45:36

+0

@Sla http://weblogs.asp.net/zeeshanhirani/archive/2008/04/18/how-to-do-in-and-like-clause-in-linq-to-sql.aspx – stephen776 2011-04-08 17:04:52

回答

4
public IEnumerable<Result> Search(string searchText) 
{ 
    if(string.IsNullOrEmpty(searchText)) 
     return _context.Person; 
    else 
     return _context.Person.Where(x => x.Contains(searchText)); 
} 
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)); 
    } 
4
_context.Person.Where(x => string.IsNullOrEmpty(searchText) ? true : x.Contains(searchText)); 
+0

好的和最短的方式。谢谢。 – Dilip0165 2016-04-11 08:50:50

0

你可以这样说:

return _context.Person.Where(x => 
    string.IsNullOrEmpty(searchText) || 
    x.Contains(searchText) 
); 

这是我用了很多的模式,当我有参数,我想只有在设定后才适用。

0

和不太有效的方式......如果不知道这是语义正确的,但你的想法...

return _context.Person.Where((x, index) => x.Contains(searchText ?? x[index])); 
0

假设Person是一类Contains似乎是这个类的方法。像Where(x => x.Contains(searchText))Where(x => string.IsNullOrEmpty(searchText) || x.Contains(searchText))其中x是一个人不会使用LINQ在所有的工作到实体,即使有一个简单的类象的表达......

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public bool Contains(string searchText) 
    { 
     return Name.Contains(searchText); 
    } 
} 

...它会抛出一个异常,因为LINQ到实体不能将此方法转换为存储表达式。 Where(x => string.IsNullOrEmpty(searchText) || x.Name.Contains(searchText))虽然会工作。