Dynamic Expression APIの使用に問題があります。 DataTableフィールドをDBNull.Valueと比較できないようです。 APIは、「静的フィールドまたは静的プロパティへのアクセスをサポートします。すべてのパブリックフィールドまたはプロパティにアクセスできます」と想定されています。ただし、次のクエリの場合:
var whatever = table1.AsEnumerable()
.Join(table2.AsEnumerable(),
(x) => x.Field<int>("Table1_ID"),
(y) => y.Field<int>("Table2_ID"),
(x, y) => new { x, y})
.AsQueryable()
.Where("x[\"NullableIntColumnName\"] == DBNull.Value");
「プロパティ 'DBNull'がタイプ '<> f__AnonymousType0`2'に存在しません」というエラーが発生します。
これを回避する方法について誰かがアイデアを持っていますか? Whereメソッドに渡された文字列でSubmission.Field( "NullableIntColumnName")を使用できません。そうでなければ、DBNull.Valueではなくnullと比較できます。
さて、私はついにそれを手に入れました。 cptScarletはそれをほとんど持っていました。
var values = new object[] { DBNull.Value };
...
.Where("x[\"NullableIntColumnName\"] == @0", values);
または
.Where("x[\"NullableIntColumnName\"] == @0", DBNull.Value);