C# 没有行时如何处理CopyToDataTable()?
我有密码:C# 没有行时如何处理CopyToDataTable()?,c#,C#,我有密码: dt = collListItems.GetDataTable().AsEnumerable() .Where(a => Convert.ToString(a["Expertise"]).Contains(expertise) && Convert.ToString(a["Office"]) == office) .CopyToDataTable(); filteredCount = dt.Rows.Count(); 当没
dt = collListItems.GetDataTable().AsEnumerable()
.Where(a => Convert.ToString(a["Expertise"]).Contains(expertise) && Convert.ToString(a["Office"]) == office)
.CopyToDataTable();
filteredCount = dt.Rows.Count();
当没有匹配的行时,如何最好地处理事件?目前我得到“源不包含数据行”,但我想在这种情况下将filteredCount设置为0
提前谢谢
编辑:我知道一个try..catch可以工作,但是有没有更优雅的方法?您可以首先判断是否有匹配的行:
var rows = collListItems.GetDataTable().AsEnumerable()
.Where(a => Convert.ToString(a["Expertise"]).Contains(expertise) && Convert.ToString(a["Office"]) == office);
DataTable dt = table.Clone();
if (rows.Count() > 0)
dt = rows.CopyToDataTable();
您当然不想为此使用try/catch。Try/Catch应该在真正特殊的情况下使用,因为您不想让它驱动您的控制流。在几乎所有情况下,都有更好的方法直接构建到语言/库中,或者只需要很少的代码编写工作 在本例中,您希望事先捕获表,这样就不会调用
GetDataTable()
方法超过需要的次数,因为如果查询不包含任何结果,我们将需要它。如果查询本身很昂贵或运行时间很长,您还可以选择在查询中包含ToList()
,因此只需执行一次
之后,需要测试结果中是否有行。如果是这样,您可以安全地复制到datatable。否则,只需克隆原始表的结构(不包括行),这样无论哪种情况,您都有一个正确的表结构,可以检查行数,将其绑定到控件,等等,这样就不会有任何意外
var table = collListItems.GetDataTable();
var rows = table.AsEnumerable().Where(...); // optionally include .ToList();
var dt = rows.Any() ? rows.CopyToDataTable() : table.Clone();
int filteredCount = dt.Rows.Count;
我认为这是一个更简单的解决方案:
var Adj = (from c in View.AdjustmentsDataSource.AsEnumerable()
where c["Adjustment"] != System.DBNull.Value
select c);
if (Adj == null || Adj.Count() == 0)
return;
DataTable dtChanges = Adj.CopyToDataTable();
var results=来自dtL1Users.AsEnumerable()中的myRow
其中(Convert.ToInt32(myRow[“No_x0020_of_x0020_L1_x0020_Remin”])>=Convert.ToInt32(maxl1升级)和Convert.ToDateTime(myRow[“L2_x0020_Last_x0020_升级_x0”])
这个解决方案怎么样:
DataRow[] filtered_rows = data.Tables[0].Select(filter_string);
if(filtered_rows.Length > 0)
{
filtered_data = filtered_rows.CopyToDataTable();
}
else
{
filtered_data.Clear();
}
数据。表[0]
是源表,过滤的数据
是结果表。下面的代码对我有用。请试一试
DataRow []dataRow = dataTable.Select(query, seq);
if (dataRow != null && dataRow.Length > 0)
{
return dataTable.Select(query, seq).CopyToDataTable();
}
你能发布stacktrace吗?
GetDataTable()
昂贵吗(调用数据库、web服务等)?您是只对计数感兴趣还是也需要数据?它不贵,最多70-90行,不经常使用,我需要数据(如果有)和计数。如果FilterIngnity解决方案后至少剩下一行,则可以正常工作。感谢您的返回语句建议可能会变得难看的非确定性编码样式。
DataRow []dataRow = dataTable.Select(query, seq);
if (dataRow != null && dataRow.Length > 0)
{
return dataTable.Select(query, seq).CopyToDataTable();
}