2011-12-27 166 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;