Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 在这些查询中,哪个查询的性能更好?为什么?_Linq - Fatal编程技术网

Linq 在这些查询中,哪个查询的性能更好?为什么?

Linq 在这些查询中,哪个查询的性能更好?为什么?,linq,Linq,第一个Linq查询是 ( from r in db.Rider join s in db.Spaces on r.SpaceID equals s.SpaceID group new { r,s } by new { r.SpaceID, s.SpaceCode } into grp select new { Count=grp.Count(), grp.Key.SpaceID, gr

第一个Linq查询是

(
    from r in db.Rider
    join s in db.Spaces
        on r.SpaceID equals s.SpaceID
    group new { r,s } by new { r.SpaceID, s.SpaceCode }
    into grp
    select new
    {
        Count=grp.Count(),
        grp.Key.SpaceID,
        grp.Key.SpaceCode
    }
)
第二个Linq查询是:

(
    from r in db.Rider
    join s in db.Spaces
        on r.SpaceID equals s.SpaceID
     select new {r,s}).GroupBy(r => r.SpaceID)
  .Select(data => new Result                               
       {
           SpaceID = data.FirstOrDefault().r.SpaceID,
           SpaceCode = data.FirstOrDefault().s.SpaceCode
       });

以下哪种查询在性能方面更好?为什么?

您的第一个LINQ查询等价于SQL查询是:

SELECT COUNT(*) AS [Count], [t0].[SpaceID], [t1].[SpaceCode]
FROM [Rider] AS [t0]
INNER JOIN [Spaces] AS [t1] ON [t0].[SpaceID] = ([t1].[SpaceID])
GROUP BY [t0].[SpaceID], [t1].[SpaceCode]

但是我在你的第二个LINQ查询中出错了。您确定它是正确的吗?

您的第一个LINQ查询等价于SQL查询是:

SELECT COUNT(*) AS [Count], [t0].[SpaceID], [t1].[SpaceCode]
FROM [Rider] AS [t0]
INNER JOIN [Spaces] AS [t1] ON [t0].[SpaceID] = ([t1].[SpaceID])
GROUP BY [t0].[SpaceID], [t1].[SpaceCode]

但是我在你的第二个LINQ查询中出错了。你确定它是正确的吗?

只有你能知道。而且,查询是不同的,那么比较有多有用?相同的结果有多不同?哪种分组和选择不同实体的方式一个查询有计数,另一个没有。此外,您没有指定要使用的ORM。即使你这样做了,通常也无法判断什么会表现更好。您必须自己进行基准测试,可能会带着一个问题返回,即为什么某个特定查询执行得很差,并附带数据库提供程序、已翻译的SQL查询、,索引等。您可以使用LiqPad将LINQ语句转换为TSql,然后使用SQL Server EstimatedPlan获得比较两个查询的正确结果[您的第二个查询是错误的,与第一个查询不等效!我认为在group by子句“SpaceCode”中被删除,并且不包含任何计数聚合函数。显然,这两个查询不相等。在性能评估方面,您可以使用分析工具(如SQL profiler)来查找结果查询,并查找性能差异。只有您才能知道。此外,查询不同,因此比较有多大用处?h相同的结果有多大不同?哪种不同的分组方式和选择不同的实体?一个查询有计数,另一个没有。此外,您没有指定您正在使用的ORM。即使您指定了,通常也无法确定哪些性能更好。您必须进行自己的基准测试,并可能返回一个问题,即为什么要使用特定的ORM查询执行得很差,伴随着数据库提供程序、已翻译的SQL查询、索引等大量信息。您可以使用LiqPad将LINQ语句转换为TSql,然后使用SQL Server EstimatedPlan获得比较两个查询的正确结果[您的第二个查询是错误的,与第一个查询不相等!我认为在group by子句中是“SpaceCode”被删除,也不包含任何计数聚合函数。显然,这两个查询不相等。在性能评估方面,您可以使用分析工具(如SQL profiler)查找结果查询并查找性能差异。