2012-02-07 150 views
1

我渴望知道最好的方法来检查,如果数据集有记录与否。 我一直在使用下面的代码来检查数据集是否有一些记录。但我觉得有一些更好/最好的方法可以实现这一点。最佳做法有记录

Dataset tableData = New Dataset(); 
if (_tableData.Tables.Count > 0 && _tableData.Tables[0].Rows.Count > 0) 
{ 
} 

如果我感觉正确,请分享一些知识。

感谢

+0

DataSet通常是多个DataTable的容器。我没有看到知道某些DataSet表是否包含行的原因。难道它不太容易出错,只能检查现有记录的相关DataTable吗? (即使你的DataSet现在只包含一个表格,将来可能会改变) – 2012-02-07 10:10:14

+0

你是对的Tim。我会牢记这一点。 – 2012-02-07 10:15:22

回答

6

这将返回true如果有任何表的任何行。如果没有表或没有行,它将返回false

DataSet tableData; // ... instantiate DataSet 
bool hasRows = tableData.Tables.Cast<DataTable>() 
           .Any(table => table.Rows.Count != 0); 
+0

它引发一个错误,“不包含AsEnumerable()的定义.........” – 2012-02-07 10:10:52

+0

@Deepak修复它 - thx指出错误 – 2012-02-07 10:14:26

+0

'Cast '返回'IEnumerable '所以没有必要再次转换它。 – Tomek 2012-02-07 10:31:11

0

您可以HasChanges()这将是只包括数据的全成插入新的,删除或修改行

真实支票
 DataSet dSet = new DataSet(); 
     if (dSet.HasChanges()) 
     { 

     } 

你也可以得到它通过DataSet.HasChanges(DataRowState)确切地知道发生新的行是否添加,修改或删除

+0

如果行被修改,它会被设置为true吗?例如更新/删除等。 – 2012-02-07 10:03:45

+0

是的,当然我说na。请参阅我给出的链接。 – 2012-02-07 10:09:47

+0

反正谢谢赛。 – 2012-02-07 10:24:53

2

如果在你的DataSet那么你的逻辑多个表不会为某些情况下工作。 这种方法较为齐全:

bool HasRecords(DataSet dataSet) 
{ 
    foreach (DataTable dt in dataSet.Tables) if (dt.Rows.Count > 0) return true; 
    return false; 
} 
+1

感谢您的回答。我有一个查询。正如你在谈论数据集中的多个表一样,通过这段代码,如果有两个表,并且第一个有行而第二个没有行,我就会变成真。 – 2012-02-07 10:07:48

+0

正确,如果“DataSet”中有任何记录,则无论在哪个表中,都会变为true。如果你想确保所有的表都有记录: '布尔HasRecords(DataSet的数据集) { \t布尔RES = TRUE; (dataTable dt in dataSet.Tables)if(dt.Rows.Count == 0)res = false; \t return res; }' – Tomek 2012-02-07 10:11:51

0

嗯好是不会做的工作,如果你有DataSet中的多个数据表。

可没想到这里我需要做的这是诚实的场合。如果我有类似的需求,我会在DataSet中查找表,因为假设所有那些人都出于某种功能原因。

所以我可能只是检查客户表是否是空的,一个SELECT COUNT,因为如果是在检查什么都没有任何意义。

+0

正确。但在这里我知道我只有一张桌子。所以只需检查一张桌子。如果我选择多个表格,我一定会采用不同的方法。好的一点,但。 – 2012-02-07 10:18:04