Мне нужно разделить предикат над 4-5 разностными сущностями, предпочтительно, без дублирования кода. Все объекты реализуют интерфейс IEntity
.Entity Framework Generic Predicate
private Expression<Func<T, bool>> GetUpdatedPredicate<T>(DateTime? lastUpdated) where T : IEntity {
if (lastUpdated.HasValue) {
return x => (
x.CreatedAt >= lastUpdated ||
(x.UpdatedAt.HasValue && x.UpdatedAt >= lastUpdated)
);
}
return x => true;
}
Затем используется, как это, по множественным множества сущностей:
(
from s in Db.EntityA.Where(GetUpdatedPredicate<EntityA>(lastUpdated))
where (
s.User.Id == 1
)
select s
).Future();
Но выдает ошибку: Невозможно бросить тип 'EntityA' к типу 'IEntity'. LINQ to Entities поддерживает только листинг примитивных или перечисляемых типов EDM. Есть ли способ сделать это без дублирования кода?
Я думаю, вы пытаетесь сделать что-то похожее на то, что я пытался сделать, и поразить ту же проблему, что и я. Я пытался фильтровать по организации, вы пытаетесь фильтровать User. Посмотрите на решение здесь: http://stackoverflow.com/q/20052827/150342 – Colin
Это действительно работает, но решение @ Moeri ... что ИМО намного приятнее;) – Jamie