私の簡単な例では、次のプロパティを持つオブジェクトがあります。
次の方法で動的クエリを作成できるようにする必要があります
var predicate = "Name = @0";
var values = new object[]{"Ed"};
myIQueryableDataSource.Where(predicate, values)
この作品は良いです。次に、日時を比較したい
var predicate = "BirthDateTimeStamp >= @0";
var values = new object[]{someDateTime};
これもうまくいきます。しかし、日付時刻を比較するときに私が実際にやりたいことは、この問題は日付を比較することです。
var predicate = "BirthDateTimeStamp.Date >= @0";
DateプロパティはEFからSQLサーバーに認識されないため、これは不可能です。
var predicate = "System.Data.Entity.DbFunctions.TruncateTime(BirthDateTimeStamp) >= @0";
述語のオブジェクトプロパティにしかアクセスできないため、これも機能しません。
この方法でこれを解決して、述語が文字列形式のままになるようにするにはどうすればよいですか?このコードは、私のクエリ用の既存の大きなパーサーの一部であり、connatは完全に書き直されます。
@RockResolveによる回答は機能しましたが、ハックのようなものです。 Linq Dynamicsは、カスタム関数を追加する機能を提供します
public class CustomTypeProvider: IDynamicLinkCustomTypeProvider
{
public HashSet<Type> GetCustomTypes()
{
HashSet<Type> types = new HashSet<Type>();
// adding custom types
types.Add(typeof(DbFunctions));
return types;
}
}
// use below line to add this to linq
System.Linq.Dynamics.GlobalConfig.CustomTypeProvider = new CustomTypeProvier();