2011-04-08 88 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))雖然會工作。