【发布时间】:2019-09-16 05:39:43
【问题描述】:
我在 datatable 的特定列中计算某些 int 值(1、2、3 或 4)。该列可以包含的唯一值是 1 到 9(不包括)之间的整数或 null。
例如,具有 10 个条目的典型列如下所示:
Level
1
2
1
4
3
7
3
3
(null)
9
这很好用,尽管是空值。只要有一个非空值,我的代码就可以工作。
但是,当列仅包含空值时,代码会失败,这可能会发生,因为我正在从数据库中提取此数据,并且根据条件,所有结果都可能为空。
我正在使用下面显示的代码来进行此计数。我看了这个问题:Input string was not in a correct format 但我不确定在这种情况下使用TryParse() 的方法。
int countnum = tab2table.AsEnumerable().Where(x => int.Parse(x["Level"].ToString()) == 1 || int.Parse(x["Level"].ToString()) == 2 ||
int.Parse(x["Level"].ToString()) == 3 || int.Parse(x["Level"].ToString()) == 4).ToList().Count;
对于上面显示的Level 列示例,countnum 应为 7。当该列全部为空时,countnum 应为 0。
即使该列全部为空,如何才能将其更改为工作?我想如果有办法检查列是否为空,我可以把它放在一个 if 语句中,但我还没有找到办法。
【问题讨论】:
-
你试过
x["Level"] != null吗? -
@JoséPedro 因为这是
DataTable,他们可能需要实际检查DBNull。另见:stackoverflow.com/questions/4604414/… -
@MattBurland 如果我将 ` x["MPerfLevel"] != DBNull.Value && ...` 添加到我的代码中,它仍然给我同样的错误
-
int countnum = tab2table.AsEnumerable().Where(f => f["Level"] != DBNull.Value && (int)f["Level"] > 0 && (int)f["Level"] < 5).Count();