2016-03-09 51 views
1

控制器中的操作方法接收一個值,就像幾個字母一樣。代碼檢查表中是否包含這些字母。我使用這個代碼,這個任務:檢查對數據庫的查詢是否爲空

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())); 

但我怎麼能檢查result變量爲空或空,當沒有任何匹配的信嗎?我測試了這個,但它不起作用!

If(result == ""){ 
// Do something 
} 

我想使用Viewbag發送一條消息,指出沒有匹配,或者在視圖中執行此檢查。我在一些AJAX和部分視圖中使用了它,並且它工作的很完美,但是如果沒有任何匹配,我只想顯示一條消息。檢查result值爲空還是爲空的最佳方法是什麼?

+0

是什麼結果類型? – Haris

+0

'if(result!= null){// all good' –

+0

提示:檢查['IEnumerable.Where ']的返回值類型(https://msdn.microsoft.com/zh-cn/library/bb549418的.aspx)。 – Albireo

回答

2

的最簡單的方法是通過使用!result.Any()

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())); 

If(!result.Any()){ 
    // Do something 
} 

從MSDN上IEnumerable

任何()

確定序列是否包含任何元素。

完全符合您的需求。

+1

這是所有我認爲最好的答案,因爲它通過一個簡單的解決方案來回答問題,提供參考資料,並預期使用某項功能 - 其他解決方案需要額外的工作。 +1 –

1

試試這個,使用FirstOrDefault它會給你的結果的第一條記錄,否則,如果沒有結果從它返回默認值是null查詢得到,

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())).FirstOrDefault(); 

    If(result == null){ 
    // Do something 
    } 

或者,如果你想使用這個結果,操縱你的代碼中的東西,然後你可以使用ToList()。這將返回列表值,如果查詢didnt產生什麼則列表計數爲0。

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())).ToList(); 

If(result.Count == 0){ 
    // Do something 
} 
1

您的代碼不工作,因爲代碼返回一個對象而不是字符串,如果你想返回字符串,那麼你必須使用「選擇」子句來選擇一個特定的字段,如果你想檢入相同的代碼,然後修改:

var result = db.People.Where(b => b.Name 。.ToUpper()包含(filter.ToUpper()))ToList(); 如果(結果!= NULL & & result.Count> 0)

它會爲你工作。

1

對於IEnumerable的,我們可以用任何(),您的代碼將可以寫成

if(!db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())).Any() { 
// do some thing 
}