Я использую Entity Framework для доступа к моделям домена, все из которых реализуют интерфейс (IPublishable), который указывает свойства, указывающие, был ли элемент опубликован..NET LINQ to Entities base where clause for generic Тип
При доступе к элементам с лицевой стороны я всегда хочу отфильтровать неопубликованные элементы. Таким образом, каждый раз, когда я пишу запрос я делаю что-то похожее на это (где на следующий DbSets Objects1 и Objects2 как реализовать IPublishable
context.Objects1.Where(x => x.IsPublished ...).OrderBy(x => x.Id).ToList()
context.Objects2.Where(x => x.IsPublished ...).First()
Что было бы идеальным, если я мог бы придать общее Where()
положение во всех моих запросы в пределах моего веб-приложения или если существует способ, чтобы написать метод расширения, который я мог бы включать в каждом запросе.
Я попытался создать метод расширения для всех LINQ запросов
public static IEnumerable<T> FrontEnd<T>(this DbSet<T> dbSet) where T : class {
return dbSet.Cast<IPublishable>().Where(x => x.IsPublished ...).Cast<T>();
}
И использовать как т его ...
context.Objects1.FrontEnd().Where(x => ...).OrderBy(...
Однако я получаю ошибку «LINQ к Entities поддерживает только литье EDM примитивные или перечисления типов»
Я новичок в EF, так что любая информация была бы большая помощь. Thanks
Я бы подумал, что для этого может быть создано какое-то [выражение] (http://msdn.microsoft.com/en-us/library/bb397951.aspx). – Romoku
Чтобы достичь чего-то подобного, я закончил использование динамического linq. Но это было только для определенного подмножества данных, а не «всех запросов linq» по мере необходимости, поэтому я не уверен, что это именно то, что вы ищете. – Mansfield
Я думаю, что истинным ответом, который я искал, был промежуточный промежуток между моей инфраструктурой App и Entity, в которой я мог перехватывать запросы и добавлять на базу, где предложение, которое я использовал во всех своих запросах. – JDandChips