【发布时间】:2019-02-18 23:19:46
【问题描述】:
我有以下 SQL 脚本,它运行良好且速度非常快:
select top 30 CONVERT(date, p.DateCreated) as Fecha,
(select count(*) from People d where d.recipientid = p.recipientid and d.SubscriptionType = 0 and CONVERT(date, p.DateCreated) = CONVERT(date, d.DateCreated)) as Subscribed
from People p
where p.RecipientId = '276643679047355'
group by CONVERT(date, p.DateCreated), p.RecipientId
order by CONVERT(date, p.DateCreated) desc;
但是,当我尝试使用 LinQ 从 C# 应用程序调用它时,它没有按预期响应(事实上,在等待 5 分钟后,我必须说它根本没有响应)。我想出了下面的 LinQ 命令,但是,一定有问题,因为它的响应速度不如提供的 SQL 脚本快:
model = await _context.People
.Where(x => x.RecipientId == recipientId && x.DateCreated > startDate && x.DateCreated < endDate)
.Select(x => new { DateGrouped = x.DateCreated.ToString("yyyy-MM-dd"), x.RecipientId })
.GroupBy(x => new { x.DateGrouped, x.RecipientId })
.Select(a => new StatsViewModel
{
DateStatsFormatted = a.Key.DateGrouped,
Subscribed = _context.People.Where(d => d.RecipientId == a.Key.RecipientId && d.SubscriptionType == SubscriptionType.Suscribed && d.DateCreated.ToString("yyyy-MM-dd") == a.Key.DateGrouped).Count()
}
)
.ToListAsync();
您能否帮我指出我做错了什么,或者至少建议我搜索什么?
【问题讨论】:
-
当您运行 SQL 跟踪时,正在向服务器提交什么 SQL?
-
你有没有考虑使用
yyyy-MM-dd而不是stackoverflow.com/a/46936300/34092? -
嗨 @mjwills,我不知道如何使用 SQL 跟踪......让我找出来,我会回复你
-
@mjwills,我会尝试使用建议的方法......但是,我在另一个没有 GroupBy 的 LinQ 查询中使用 yyyy-MM-dd 方法,它工作正常。