2011-12-27 174 views
-6

我是LINQ的新手。我有這樣的方法:如何將此代碼轉換爲LINQ

public bool IsNullOrEmptyDataTable(DataSet objDataset, int tableNo) 
{ 
    if (objDataset != null) 
    { 
     if (objDataset.Tables.Count > 0) 
     { 
      if (objDataset.Tables[tableNo].Rows.Count > 0) 
      { 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 
     else 
     { 
      return true; 
     } 
    } 
    else 
    { 
     return true; 
    } 
} 

任何人都可以重寫LINQ中的業務邏輯來保存代碼行嗎?

+1

只需將比較結果直接返回到最裏面的if就可以保存7行代碼, 'return objDataset.Tables [tableNo] .Rows.Count == 0'。如果你擺脫了所有'else'子句,並且在最外層的'if'外部有一個無條件的'return true',你可以節省更多的行(〜8)。 – bobbymcr 2011-12-27 10:12:31

+0

您正試圖通過縮短代碼來改進您的代碼。代碼越短代碼越好,並不總是這樣。由於代碼是一次寫入但讀取很多次,所以你真正想要的是*清除*代碼。切換一個簡單的查詢到LINQ可能會縮短它,但更難以理解;將一個非常複雜的查詢切換到LINQ可能會使它更短,更易於理解。在這種情況下,如答案所示,只需刪除不必要的其他分支就可以使測試更加清晰。 – 2011-12-27 10:31:10

+0

看馬! [箭頭](http://lostechies.com/chrismissal/2009/05/27/anti-patterns-and-worst-practices-the-arrowhead-anti-pattern/)! – nulltoken 2011-12-27 10:45:32

回答

2

其他的答案已經展示瞭如何可以(而且應該IMO)這樣做沒有LINQ - 但他們倆都還是得到了您的原始代碼做同樣的問題:你只檢查數據集是否有任何 - 它可能少於tableNo表。我會建議:

public bool IsNullOrEmptyDataTable(DataSet objDataset, int tableNo) 
{ 
    return objDataset == null || 
      objDataset.Table.Count <= tableNo || 
      objDataset.Tables[tableNo].Rows.Count == 0; 
} 
+0

@AdamMaras:哎呦 - 在此基礎上另一種答案開始嗎?。固定的,但只是通過扭轉條件。 – 2011-12-27 10:17:55

2

爲什麼選擇linq?

public bool IsNullOrEmptyDataTable(DataSet objDataset, int tableNo) 
{ 
    return (objDataset != null && objDataset.Table.Count > 0 && objDataset.Tables[tableNo].Rows.Count > 0); 
} 
+1

可以刪除''運營商 – Jan 2011-12-27 10:13:34

+0

是的,我剛剛看到它太 – Nop 2011-12-27 10:14:50

2
public bool IsNullOrEmptyDataTable(DataSet objDataset, int tableNo) 
     { 
      return objDataset == null || (objDataset.Tables.Count <= 0 || objDataset.Tables[tableNo].Rows.Count <= 0); 
     } 

沒有必要使用LINQ這個

0

絕對沒有使用LINQ的這個; LINQ用於處理集合中包含的數據,而不檢查管理所述集合的對象的屬性。

話雖這麼說,你可以大大所有的條件組合成一個布爾表達式簡化此代碼。

return objDataset == null || 
     objDataset.Tables.Count == 0 || 
     objDataset.Tables[tableNo].Rows.Count == 0;