いろいろ細かいところが面倒だったので
対応した内容をメモ
Binary形式の比較ができない
下記のようなクラスを作成し
public static class BinaryComparer
{
public static int Compare(this Binary b1, Binary b2)
{
throw new NotImplementedException();
}
}
where内で使う
hoge.Where(row =>BinaryComparer.Compare(binary, row.binary_column) == 0) ;
PropertyInfoを使ったカラム指定
public static Expression<Func<TItem, bool>> PropertyEquals<TItem, TValue>(
PropertyInfo property, TValue value)
{
var param = Expression.Parameter(typeof(TItem));
var body = Expression.Equal(Expression.Property(param, property),
Expression.Constant(value));
return Expression.Lambda<Func<TItem, boo>>(body, param);
}
次のように利用する
hoge.Where(PropertyEquals<hogetype, byte>(propertyInfo, somebyte));
上記だとnullableに対応していないので
nullable対応版
public static Expression<Func<TItem, bool>> NullablePropertyEquals<TItem, TValue>(
PropertyInfo property, TValue? value) where TValue : struct
{
var param = Expression.Parameter(typeof(TItem));
var body = Expression.Equal(
Expression.Property(param, property),
Expression.Constant(value, typeof (TValue?)));
return Expression.Lambda<Func<TItem, bool>>(body, param);
}
nullableでしか動かないので注意
両方に対応したメソッドも作れるような気はするけど
取りあえずここまで
0 件のコメント:
コメントを投稿