当用作具有多个Into
子句的Linq表达式的第一个(外部)子句时,VB.NET的Aggregate
查询是否有致命缺陷,因为每个Into
子句都是分别执行的?由于每个分词都单独执行,因此是否具有集体致命缺陷?
的“明显的”答案SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant
in LINQ to SQL是
Dim limits = Aggregate p In Plants Select p.ZoneMin Into Min(), Max()
然而,这个答案其实检索每个Min
和Max
(如果你包括像Count
和Average
其它集合函数)在单独 SQL查询。这可以很容易地在LINQPad中看到。
LINQPad没有显示一个事务(或其他使这些查询为原子的东西),还是这是一个等待发生的竞争条件? (所以你必须做上述问题的答案中显示的技巧来强制一个查询返回多个聚合。)
总之,是否有一个使用Aggregate
的LINQ-to-SQL查询返回多个聚合函数在单个(或至少“原子”)查询?
(我也说“很明显”,因为明显的答案对我来说,Aggregate p In Plants Into Min(p.ZoneMin), Max(p.ZoneMin)
,实际上获得了整个表的两倍,优化甚至当,然后使用LINQ到实体Min
和Max
以获得结果: - ()
我以为Aggregate
不是VB-具体,但它看起来像C#没有这个查询表达式,所以我已经改变了.net到vb.net
您可能可以通过跟踪SQL服务器本身来验证查询是否在事务中,它应该显示它(但我不能100%确定它)。但是,如果性能不是主要问题,则最好读取整个数据集并进行汇总(基本上,处理数据的快照)。 – Alex
请注意,这就是我希望我的原始'Into Min(p.ZoneMin)'查询会优化到,因为查询的SQL部分现在是相同的。也许JITter可能仍然可以看到,但LINQPad的/ o +没有。 –
虽然你只是用SQL支持的函数进行聚合,但最好是按照“不变的技巧分组”来让数据库进行聚合。 –