【发布时间】:2015-04-01 19:43:43
【问题描述】:
我有以下 SQL
SELECT Tag , COUNT(*) , MAX(CreatedDate)
FROM dbo.tblTags
GROUP BY Tag
输出如下:
+-----------------+------------------+-------------------------+
| Tag | (No column name) | (No column name) |
+-----------------+------------------+-------------------------+
| a great tag | 1 | 2015-04-01 18:30:31.623 |
| not a test | 1 | 2015-04-01 17:46:09.360 |
| test | 5 | 2015-04-01 18:13:17.920 |
| test2 | 1 | 2013-03-07 16:53:54.217 |
+-----------------+------------------+-------------------------+
我正在尝试使用 EntityFramework 复制该查询的输出。
我有以下有效的逻辑:
var GroupedTags = Tags.GroupBy(c => c.Tag)
.Select(g => new
{
name = g.Key,
count = g.Count(),
date = g.OrderByDescending(gt => gt.CreatedDate).FirstOrDefault().CreatedDate
})
.OrderBy(c => c.name);
但与原始 SQL 查询相比,执行时间非常长。关于如何优化我的方法的任何建议?感觉有点不对劲。
【问题讨论】:
-
你可以使用 LinqPad 之类的东西来查看生成的 SQL 是什么,然后调整你的 linq 以得到更接近你想要的东西
-
你也可以使用
g.Max(x => x.CreatedDate) -
另外,请尝试添加
ToList()以确保它一次访问数据库。 -
@DLeh,是的,
Max()应该可以解决问题;)我建议您将其发布为答案。 -
我已经添加了一个答案。希望有帮助
标签: c# sql linq entity-framework