-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Description
This was reported in the Preview 9 blog post:
This LINQ statement (and other similar statements) was being translated properly till Preview 8:
var queryYearly =
from h in context.Histories.AsNoTracking() group h by h.HistoryDate.Year into yearGroup
orderby yearGroup.Key descending
let Total = yearGroup.Sum(m => m.Fee)
where Total > 0
select new
{
Year = yearGroup.Key,
Total
};
Updated to preview 9 this morning and I am getting the following error:
System.InvalidOperationException HResult=0x80131509 Message=Processing of the LINQ expression 'GroupBy(KeySelector: DATEPART(year, h.HistoryDate), ElementSelector:EntityShaperExpression: EntityType: Histories ValueBufferExpression: ProjectionBindingExpression: EmptyProjectionMember IsNullable: False)' by 'RelationalProjectionBindingExpressionVisitor' failed.....
According to @smitpatel:
Let throws us off. If you remove let then it works:
SELECT DATEPART(year, [b].[HistoryDate]) AS [Year], SUM([b].[Fee]) AS [Total]
FROM [Blogs] AS [b]
GROUP BY DATEPART(year, [b].[HistoryDate])
HAVING SUM([b].[Fee]) > 0
ORDER BY DATEPART(year, [b].[HistoryDate]) DESC
With let the expression we get is:
value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[EFSampleApp.Blog]).AsNoTracking().GroupBy(h => h.HistoryDate.Year).OrderByDescending(yearGroup => yearGroup.Key).Select(yearGroup => new <>f__AnonymousType0`2(yearGroup = yearGroup, Total = yearGroup.Sum(m => m.Fee))).Where(<>h__TransparentIdentifier0 => (<>h__TransparentIdentifier0.Total > 0)).Select(<>h__TransparentIdentifier0 => new <>f__AnonymousType1`2(Year = <>h__TransparentIdentifier0.yearGroup.Key, Total = <>h__TransparentIdentifier0.Total))
Since Select contains reference to grouping which cannot be put in Projection in SelectExpression we throw.