C# LINQtoSQL比LINQtoEntity快3倍

C# LINQtoSQL比LINQtoEntity快3倍,c#,linq-to-sql,entity-framework-core,linq-to-entities,C#,Linq To Sql,Entity Framework Core,Linq To Entities,我试图在EF Core 3.1.1上执行Linq to Entity查询,它比使用Linq to SQL提供程序在Linqpad上执行相同查询要慢3倍 var startDateTime = new DateTime(2020, 01, 18, 0, 0, 0); var endDateTime = new DateTime(2020, 02, 26, 0, 0, 0); var logs = _db.Logs .Where(w => w.

我试图在
EF Core 3.1.1
上执行
Linq to Entity
查询,它比使用
Linq to SQL
提供程序在Linqpad上执行相同查询要慢
3倍

  var startDateTime = new DateTime(2020, 01, 18, 0, 0, 0);
  var endDateTime = new DateTime(2020, 02, 26, 0, 0, 0);

    var logs = _db.Logs
                .Where(w => w.UserId == 10 && w.DateStamp >= startDateTime && w.DateStamp <= endDateTime)
                .GroupBy(g => new
                {
                    g.DateStamp.Date,
                    g.Result
                }).Select(s => new
                {
                    s.Key.Date,
                    s.Key.Result,
                    Conversions = s.Count(),
                    Cost = s.Sum(sum => sum.ConversionCost)
                }).ToList();
原因是什么


另外,我曾尝试使用Database.ExecuteSqlInterpolated执行SQL,它提供了与Linq-to-SQL类似的完美性能,但为什么Linq-to-Entity失败了?

数据库的大小是否相同?数据库越大,所需的哈希查找就越多[LOG2(N)]尝试不使用列表(),看看它是否有区别。@jdweng数据库是一样的,不使用列表是什么意思?我使用.ToList();若要执行Linq to Entity查询。@jdweng这些都在与同一个数据库对话,请正确阅读问题。这都是关于库之间的差异。@Tomas我们在这里帮不了多少忙。如果您确定速度如此不同,那么您最好在EF Core GitHub repo上打开一个问题。在“快速”查询中缺少参数
@p0
。您确定在EF Core中使用相同的LINQ查询,即
w.UserId==10
而不是
w.UserId==UserId
,其中
UserId
是变量吗?因为子查询不应该是SqlServer的问题,但参数嗅探是。
-- Region Parameters
-- @__startDateTime_0='2020-01-01T00:00:00', @__endDateTime_1='2020-02-26T00:00:00'
-- EndRegion
SELECT CONVERT(date, [l].[DateStamp]) AS [Date], [l].[Result], COUNT(*) AS [Conversions], SUM([l].[ConversionCost]) AS [Cost]
FROM [Log] AS [l]
WHERE (([l].[UserId] = 10) AND ([l].[DateStamp] >= @__startDateTime_0)) AND ([l].[DateStamp] <= @__endDateTime_1)
GROUP BY CONVERT(date, [l].[DateStamp]), [l].[Result]
-- Region Parameters
DECLARE @p0 Int = 10
DECLARE @p1 DateTime = '2020-01-01 00:00:00.000'
DECLARE @p2 DateTime = '2020-02-26 00:00:00.000'
-- EndRegion
SELECT COUNT(*) AS [Conversions], SUM([t1].[ConversionCost]) AS [Cost], [t1].[value] AS [Date], [t1].[Result]
FROM (
    SELECT CONVERT(DATE, [t0].[DateStamp]) AS [value], [t0].[Result], [t0].[UserId], [t0].[DateStamp], [t0].[ConversionCost]
    FROM [Log] AS [t0]
    ) AS [t1]
WHERE ([t1].[UserId] = @p0) AND ([t1].[DateStamp] >= @p1) AND ([t1].[DateStamp] <= @p2)
GROUP BY [t1].[value], [t1].[Result]
SELECT
CONVERT(DATE, log.DateStamp),
log.Result,
Count(*),
Sum(log.ConversionCost)
FROM
log
Where UserId= 10 AND  DateStamp >= '2020-01-01' AND DateStamp <= '2020-02-26'
GROUP BY
log.Result,
CONVERT(DATE, log.DateStamp)
data source=xxx.xxx.xxx.xxx;initial catalog=x-test;user id=x-v2;password=x72-;connection timeout=600