コード自体に語らせます。
public interface ISoftDeletable {
bool IsDeleted {get; set;}
}
public static class Extensions {
public IQueryable<T> Active<T>(this IQueryable<T> q) where T : ISoftDeletable {
return q.Where(t => !t.IsDeleted);
}
}
public partial class Thing : ISoftDeletable {
...
}
...
var query = from tc in db.ThingContainers
where tc.Things.Active().Any(t => t.SatisfiesOtherCondition)
select new { ... }; // throws System.NotSupportedException
エラーは次のとおりです。
LINQ to Entities はメソッド 'System.Collections.Generic.IQueryable`1[Thing] ActiveThing' メソッドを認識せず、このメソッドをストア式に変換できません。
ISoftDeletable
お分かりいただけると思いますが、単純で再利用可能なコードを使用して「where」句を追加できるように、これを流暢に表現する方法が必要です。Active()
Linq2Entities は私のメソッドで何をすべきかわからないため、ここの例は機能しません。
ここで示した例は単純なものですが、実際のコードでは、Active()
拡張機能にはさらに複雑な条件のセットが含まれているため、コード全体にそれをコピーして貼り付けたくはありません。
助言がありますか?