2012-12-08 154 views
0

如果「屬性」大於0,則我的LINQ查詢返回值,否則它不起作用,並且不會出錯。 我想第三行中的& &需要另一個語句,如果「屬性」不大於0,則不會得到它。我怎樣才能克服這一點?LINQ與if語句

編輯:我先寫的代碼是做abatishchev的回答說的。我試圖做一個速記,如果沒有別的聲明,但我已經讀過關於那個錯誤,所以代碼是爲了做別的事情,然後它真的做到了。感謝您對這件事的啓發,但我仍然不知道如何實現我對linq的最初願望,所以我已經將代碼重新排列到了更接近我目標的地方。

int attribute = 0; 
var query = from x in db.Table1 
      where x.ValueId == 1 

      if(attribute > 0) 
       x.Table2.Attribute == attribute 

      select x; 

如果屬性大於0,那麼我不想爲查詢添加額外的where子句。

謝謝你的幫助。

+3

如果屬性爲0,則它​​應返回一個空的枚舉。你還會期待什麼? – juharr

+0

如果屬性<= 0,您希望發生什麼? 當屬性爲0時,您不會得到任何結果是正常的,因爲where子句中的條件集計算結果爲false。 – siger

+0

如果屬性<= 0,那麼我不想在我的查詢額外的where子句。帶有<= 0的查詢應該看起來像這樣:從db.Table1中的x開始,其中x.ValueId == 1選擇x; – ifsession

回答

0
if (attribute > 0) 
    query = query.Where(a => a.Table2.Attribute == attribute); 
0

如果屬性大於0 attribute > 0計算爲假,因爲你在where過濾器中使用它,沒有x實際上通過該過濾器,你會得到一個空的枚舉,這是唯一正確的。所以答案是審查你的邏輯,重新考慮attribute應該是什麼意思,它應該如何影響查詢結果。

4
(attribute > 0) && x.Table2.Attribute == attribute 

意味着「如果屬性是大於0和表屬性等於給定,否則跳過」

attribute <= 0 || ((attribute > 0) && x.Table2.Attribute == attribute) 

意味着「如果屬性是大於0和表屬性等於給定的,否則包括」

+1

你太快了:) – Larry

+0

謝謝你,請看看我的編輯。 – ifsession

+0

@ifsession:因此,如果屬性> 0,則比較,否則跳過比較,即包括記錄,對吧?然後我的代碼會爲你工作。 – abatishchev

1

我想你可能想這樣做

int attribute = 0; 
var query = from x in db.Table1 
      where (attribute <= 0) || 
      (x.ValueId == 1 && 
      x.Table2.Attribute == attribute) 
      select x; 

導致s當屬性爲< = 0時,表1中的所有內容。如果該屬性大於零,則它將應用您的過濾器。