2011-03-23 2 views
1

GROUP BY을 실제로 수행하도록 Linq-to-Entities 공급자를 얻으려면 어떻게해야합니까? 내가하는 일과 상관없이 항상 GROUP BY보다 훨씬 느린 SQL을 생성합니다. 예를 들어 :L2E : GroupBy가 항상 Distincts로 변환되고 그룹화되지 않음

SELECT 
1 AS [C1], 
[Project4].[C1] AS [C2], 
[Project4].[C2] AS [C3] 
FROM (SELECT 
    [Project3].[C1] AS [C1], 
    (SELECT 
     MAX([Extent3].[Quantity]) AS [A1] 
     FROM [dbo].[AccountQuantities] AS [Extent3] 
     WHERE (27777 = [Extent3].[AccountID]) AND ([Project3].[StartDate] = [Extent3].[StartDate])) AS [C2] 
    FROM (SELECT 
     [Distinct1].[StartDate] AS [StartDate], 
     (SELECT TOP (1) 
      [Extent2].[StartDate] AS [StartDate] 
      FROM [dbo].[AccountQuantities] AS [Extent2] 
      WHERE (27777 = [Extent2].[AccountID]) AND ([Distinct1].[StartDate] = [Extent2].[StartDate])) AS [C1] 
     FROM (SELECT DISTINCT 
      [Extent1].[StartDate] AS [StartDate] 
      FROM [dbo].[AccountQuantities] AS [Extent1] 
      WHERE 27777 = [Extent1].[AccountID] 
     ) AS [Distinct1] 
    ) AS [Project3] 
) AS [Project4] 

는 어떻게 얻을 수있는 것이이 대신 실행할 :

var foo = (from x in Context.AccountQuantities 
    where x.AccountID == 27777 
    group x by x.StartDate 
    into groups 
    select new 
    { 
     groups.FirstOrDefault().StartDate, 
     Quantity = groups.Max(y => y.Quantity) 
    }).ToList(); 

는로 변환?

SELECT 
AccountQuantities.StartDate, 
MAX(AccountQuantities.Quantity) 
FROM AccountQuantities 
WHERE AccountID=27777 
GROUP BY StartDate 

다시 말하지만 실행되는 내용에 ANY GROUP BY이 없음을 유의하십시오. 나는 EF가 이상적으로는 아닌 것들을 최적화하는 것으로는 문제가 없지만, 이것은 더 느리게 진행되며, 실제로는 GROUP BY을하도록 설득 할 수있는 방법을 찾을 수 없으며, 우리에게 중요한 문제입니다! 대신 groups.FirstOrDefault의

답변

2

사용 groups.Key(). STARTDATE

var foo = (from x in Context.AccountQuantities 
      where x.AccountID == 27777 
      group x by x.StartDate 
      into groups 
      select new 
      { 
      groups.Key, 
      Quantity = groups.Max(y => y.Quantity) 
      }).ToList(); 
+0

내 문제가 나타납니다! 고마워요! – Jaxidian

관련 문제