Я позволю коду говорить самому за себя:
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
я мог добавить предложение «где» с помощью простого, многократно используемого фрагмента кода. Пример здесь не работает, потому что Linq2Entities не знает, что делать с моим методом Active()
.
Пример, который я привел здесь, прост, но в моем реальном коде расширение Active()
содержит гораздо более сложный набор условий, и я не хочу копировать и вставлять его по всему коду.
Какие-либо предложения?
Active
в соединении. - person Jon Skeet   schedule 29.08.2013Active
, что не то же самое, что вызыватьActive
самостоятельно (как раньше). - person Jon Skeet   schedule 29.08.2013