У меня есть метод расширения, определенный следующим образом:
public static TSource MaxBy<TSource, TResult>(this IEnumerable<TSource> collection, Func<TSource, TResult> func) where TSource : class
{
var comparer = Comparer<TSource>.Default;
TSource maxItem = null;
foreach (var item in collection)
{
if (comparer.Compare(item, maxItem) > 0)
maxItem = item;
}
return maxItem;
}
, который я затем использую в следующем запросе LINQ-to-Entities:
var balancesQuery = from t in db.Transactions
where t.UserId == userId
group t by t.CurrencyCode into tg
let tMaxDate = tg.MaxBy(i => i.TsCreate)
join c in db.Currencies on tg.Key equals c.CurrencyCode
select new { Currency = c, Balance = tMaxDate.Balance }
Итак, что я делаюis - получить самую новую транзакцию (MaxBy TsCreate) в каждой валюте (сгруппировать по CurrencyCode), а затем выбрать баланс по каждой из этих транзакций.
Моя проблема в том, что не работает сEntity Framework (LINQ-to-Entities; я получаю:
LINQ to Entities не распознает метод 'Transaction MaxBy [Transaction, DateTime] (System.Collections.Generic.IEnumerable' [Transaction],System.Func'2 [Transaction, System.DateTime]) ', и этот метод нельзя преобразовать в выражение хранилища.
Тот же запрос работает с LINQ to SQL.
Мои вопросы:
- Есть ли способ заставить его работать с Entity Framework?
- Или, возможно, есть лучший способ запрашивать ту же информацию, которая будет работать сEntity Framework?
Заранее спасибо за любую помощь!