2017-07-06 63 views
-2

我想在我的linq查詢中使用OR函數。 例如: SQL:如何在Linq中使用OR運算符

select * from tblusers where userid=1 and status='a' or status='b'; 

的Linq:

var result= _Repository.selectAll().where(x=>x.UserID==1 && x.status=="a" OR x.status=="B"); 

它確實工作linq查詢。所以有沒有人有任何想法?

+0

使用''||比較運算符:'VAR結果= _Repository.SelectAll()其中(x => x.UserID == 1 &&(x.status ==「a」|| x.status ==「B」));' –

+2

LINQ本身沒有'OR'函數 - 但幸運的是C#自版本1開始。使用'||'。 ;-) – Enigmativity

回答

6

所以你知道&&運營商進行比較,那麼爲什麼不試試||運營商?無論如何,這裏是你的問題的解決方案,下面的代碼會得到你的結果與用戶ID是1和狀態是要麼aB

.where(x=>x.UserID==1 && (x.status=="a" || x.status=="B")); 
3

創建要檢查的狀態數組,然後使用contains。像這樣的東西。

var statusList = new[] {"a", "b"}; 

.Where(x=> x.UserID == 1 && statusList.Contains(x.status)); 
0

或者其他與List.Contains方法,它生成SQL查詢一樣,而不是&&運營商可以使用另Where功能,把它們連
SELECT * FROM tblusers WHERE userid=1 AND status IN ('a','b');

var acceptedStatus = new List<string> { 'a', 'b' }; 
var result= _Repository.selectAll() 
         .Where(x => x.UserID == 1) 
         .Where(x => acceptedStatus.Contains(x.Status)); 

通知。可以更具可讀性,然後在一行中適用所有條件。

1

在這裏添加我的2美分,還有另一種方法可以在C#中編寫sql查詢,這些查詢或多或少類似於sql語法。

var result = from x in _Repository.SelectAll() where x.UserID == 1 && (x.Status == "a" || x.Status == "B") select x; 

這句法是查詢語法/表達那裏作爲你的片斷是方法語法/表達。兩者都會取得相同的結果。在場景後面,查詢語法也被編譯爲方法語法。

在編譯時,根據C#規範中規定的規則將查詢表達式轉換爲標準查詢運算符方法調用。任何可以使用查詢語法表達的查詢也可以使用方法語法來表示。但是,在大多數情況下,查詢語法更具可讀性和簡潔性。

0

嘗試代碼:

var result =(from x in _Repository.selectAll() 
      where x.UserID==1 && (x.status=="a" || x.status=="B") select x); 

另一個解決方案

var result =(from x in _Repository.selectAll().where(c=>c.status=="a" || x.status=="B") 
       where x.UserID==1 select x);