Entity Framework 4.0 を使用して、次のようなコードが生成された 2 つの単純なエンティティを定義しました。
public partial class Person : EntityObject
{
public string Name { ... generated code ... }
public DateTime Birthday { ... generated code ... }
}
public partial class Sale : EntityObject
{
public int ProductId { ... generated code ... }
public DateTime DateSold { ... generated code ... }
}
この特定の例は不自然ですが、私が直面している実際の問題を表しています。多くの場合、私のコードでは、エンティティを特定の日付範囲に表示されるエンティティに制限したいと考えています。だから私は多くのインスタンスを持っています:
entities.Sales.Where(sale => sale.DateSold > startDate && sale.DateSold < endDate);
entities.People.Where(person => person.Birthday > startDate && person.Birthday < endDate);
これを処理できる一般的な方法を設定することは可能ですか? 何かのようなもの
entities.Sales.WithinRange(startDate, endDate);
完璧であり、すべての拡張メソッドを設定できることはIQueryable<T>
わかっていますが、共通コード内で WithinRange() メソッドを使用できるように柔軟性を持たせたいと考えています。例えば:
public static IQueryable<T> GetSortedNonNullObjectsInRange<T>(this IQueryable<T> data, DateTime startDate, DateTime endDate) where T : IHasDateDefined
{
return data.Where(entity => entity != null).WhereInRange(startDate, endDate).OrderBy(entity => entity.Date);
}
共通のインターフェイス (IHasDateDefined など) を使用しようとすると、インターフェイスの Date プロパティが必要に応じて Birthday または DateSold を返しますが、Entity Framework は式を作成できないというエラーをスローします。