この LINQ 関数を正しい T-SQL 関数で生成しようとして苦労しています。
次の文を確認してください。
// determine the max count of exams applied by students
IQueryable query = (from at in Database.Current.AnsweredTests
where at.TestId == id
group at by at.StudentId into s
select s.Count()).Max();
ご覧のとおり、この関数は構文的に間違っています。なぜなら、Max
拡張子は を返すからint
です。私が達成しようとしているのは、正しい T-SQL を生成することです。
このようなもの:
MAX(SELECT x.COUNT()
FROM...
GROUP BY StudentId)
良いパフォーマンスが欲しいのでこれを行いましたが、それはパフォーマンスの低下です。MAX
したがって、私の問題は、 およびのような集約関数を使用して正しい LINQ 文をどのように記述できるかCOUNT
です。
アップデート:
SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT
[Extent1].[StudentId] AS [K1],
COUNT(1) AS [A1]
FROM [dbo].[AnsweredTests] AS [Extent1]
WHERE CAST( [Extent1].[TestId] AS int) = @p__linq__0
GROUP BY [Extent1].[StudentId]
) AS [GroupBy1]
これが IQueryable を生成するものです (もちろん、最大拡張子を削除した場合)。サーバー側のパフォーマンスを向上させるために、その T-SQL クエリ内に集計関数 MAX を含める方法があるかどうかを知りたいです。