1

我在 DataTable 上使用 LINQ 查询,其中数据字段可能是bool(真/假)或int(1/0)。LINQ 查询要求Field方法的类型,如果数据字段不同,InvalidCastException则抛出一个(无法捕获)。

   var query =
   from tbl12 in t12.AsEnumerable()
   where tbl12.Field<int>("theField") == 0
   select new { T12 = tbl12 };

或者

   var query =
   from tbl12 in t12.AsEnumerable()
   where tbl12.Field<bool>("theField") == false
   select new { T12 = tbl12 };

我怎样才能解决这个问题?我想过滤字段 = false 或 0 的结果。

4

2 回答 2

0

我找到了答案:将类型设置为object并在字段上使用 ToString() 方法。

IE:

   var query =
   from tbl12 in t12.AsEnumerable()
   where tbl12.Field<object>("theField").ToString() == "false" || tbl12.Field<object>("theField").ToString() == "0"
   select new { T12 = tbl12 };
于 2012-06-28T00:34:28.663 回答
0

我想不出一个真正干净的版本来解决这个问题,所以可能最好的方法(和相关的事情)是使用这样的Convert类:

var query =
from tbl12 in t12.AsEnumerable()
where !Convert.ToBoolean(tbl12.Field<object>("theField"))
select new { T12 = tbl12 };

它并不漂亮,但至少这个变体不依赖字符串转换来获得结果。

于 2012-06-28T01:03:24.860 回答