У меня есть вопрос о предикатах в linq2sql. Что я пытаюсь сделать, это разделить условия на статический класс, а затем использовать их в моих запросах. я создал статический класс с некоторыми функциями:
public static class CountingFilters
{
public static Func<CountingItem, bool> TotalItemsPredicate
= ci =>
!ci.Deleted && ci.OdinProduct != null &&
((ci.OdinProduct.NotOriginal == null && !ci.OdinProduct.Deleted)
|| ((ci.OdinProduct.NotOriginal == ci.OdinProduct.GUID) && ci.OdinProduct.Deleted))
&& (!ci.OdinProduct.Temp);
public static Func<CountingItem, bool> AlreadyCountedPredicate
= ci =>
TotalItemsPredicate(ci) && ci.CountedAmount.HasValue;
}
Если я использую это так:
var count = CountingFacade.GetCountingItems().Count(CountingFilters.TotalItemsPredicate);
Все работает правильно, и я получаю результат.
Но когда я пытаюсь создать проекции для привязки к gridview, вот так:
var result = from f in countinglist
let alreadyCounted = f.CountingItems.Count(CountingFilters.AlreadyCountedPredicate)
let total = f.CountingItems.Count(CountingFilters.TotalItemsPredicate)
select new CountingProjection
{
AlreadyCountedProducts = alreadyCounted,
Description = f.Description,
NumberOfProducts = total,
PlannedDate = f.PlannedDate.Value,
Site = f.Site,
Status = f.Status,
Type = f.Type,
GUID = f.GUID,
};
Выдает исключение «Неподдерживаемая перегрузка, используемая для оператора запроса« Подсчет ».» По какой-то причине мои предикаты не переводятся в SQL, насколько я понимаю ... Кто-нибудь может сказать мне, что я делаю не так? Заранее спасибо.