假设我有一个DataTable:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Country", typeof(string)));
dt.Columns.Add(new DataColumn("State", typeof(string)));
现在我填充它
DataRow dn = dt.NewRow();
dn["Country"] = "1";
dn["State"] == "2";
// Add it
dt.Rows.Add(dn);
工作正常。现在,如果Country和State为零,我不希望它添加到表中。例如:
dn["Country"] = "0";
dn["State"] = "0";
if (dn["Country"].ToString() != "0" &&
dn["State"].ToString() != "0")
dt.Rows.Add(dn);
这不起作用。我在那里做错了什么?我已经尝试将类型设置为int,这也无济于事......
谢谢, 吉姆
更新:
这更像我正在做的事情:
dn["Country"] = (from c in db.Country where c.Zone == 3 select c.Code).Count();
现在,如果要返回Zero,则不应将该行添加到DataTable中。相反的是,如果计数大于0,则不会添加。
更新2
现在可以使用Any(),正如下面Jon Skeet所建议的那样。谢谢大家!
答案 0 :(得分:2)
通过“那不起作用”你的意思是行还是被添加了吗?这听起来很奇怪 - 你有一个简短而完整的程序来证明这个问题吗?
这是 工作的简短但完整的程序:
using System;
using System.Data;
class Test
{
static void Main()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Country", typeof(string)));
dt.Columns.Add(new DataColumn("State", typeof(string)));
DataRow dn = dt.NewRow();
dn["Country"] = "0";
dn["State"] = "0";
if (dn["Country"].ToString() != "0" &&
dn["State"].ToString() != "0")
{
Console.WriteLine("Broken");
dt.Rows.Add(dn);
}
else
{
Console.WriteLine("Working");
}
}
}
很难准确地根据片段确定您正在做什么,但是您可能正在更改DataTable
中已经的行的值,而不是一个尚未添加的?
编辑:这是一个非常奇怪的代码行:
dn["Country"] = (from c in db.Country where c.Zone == 3 select c.Code).Count();
为什么要将国家设置为计数?此外,如果您只关心计数,为什么还要为投影而烦恼?
最后,我可能只是使用一个局部变量而不是将其放在数据行开头:
int count = db.Country.Where(c => c.Zone == 3).Count();
if (count != 0)
{
// Use count, add the row etc
}
哦,如果你真的不需要计数,但只需知道它是否为非零,请使用Any
:
if (db.Country.Any(c => c.Zone == 3))
{
// ...
}
答案 1 :(得分:1)
您的填充代码错误,我不知道这是一个拼写错误还是直接来自您的来源。
你写了
//the "==" won't assign anything to the dn["State"] column
dn["State"] == "2";
你真正需要的地方
//the "=" will
dn["State"] = "2";
因为State列永远不会被填充,所以if条件将不起作用。
if (dn["Country"].ToString() != "0"
&& dn["State"].ToString() != "0")
//this will always be false because dn["State"] was never assigned to
另一点是,如果列未指定值,则该值将为DBNull。您可能应该修改检查以查看值是否为DBNull,您可以使用IsNull方法执行此操作。
我希望这会有所帮助: - )
答案 2 :(得分:-1)
问题是您要为DataRow分配int
(将object
装箱):
dn["Country"] = (from c in db.Country where c.Zone == 3 select c.Code).Count();
然后将其与string
进行比较:
if (dn["Country"].ToString() != "0"
尝试将Count()
更改为Count().ToString()
,问题可能会得到解决。