1

boolデータ フィールドが(true/false) またはint(1/0)の可能性がある DataTable で LINQ クエリを使用しています。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

この問題を完全に解決する方法は思いつかないので、おそらくこれ (および関連すること) を行う最善の方法は、次の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 に答える
0

私は答えを見つけました: タイプを as に設定objectし、フィールドで ToString() メソッドを使用します。

すなわち:

   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 に答える