vb.net – 由于每个into子句是单独执行的,是否存在致命的缺陷?

前端之家收集整理的这篇文章主要介绍了vb.net – 由于每个into子句是单独执行的,是否存在致命的缺陷?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当用作具有多个Into子句的 Linq表达式的第一个(外部)子句时,VB.NET的聚合查询是否有致命的缺陷,因为每个Into子句都是单独执行的?

SELECT MIN(ZoneMin),MAX(ZoneMin) FROM Plant in LINQ to SQL的“明显”答案是

Dim limits = Aggregate p In Plants Select p.ZoneMin Into Min(),Max()

但是,这个答案实际上是在单独的SQL查询中检索Min和Max中的每一个(并且包括其他聚合函数如Count和Average).这可以在LINQPad中轻松看到.

LINQPad没有显示一个事务(或其他使这些查询原子的事情),还是等待发生的竞争条件? (所以你必须做上面问题的答案中显示的技巧,强制单个查询返回多个聚合.)

总而言之,是否有使用Aggregate的LINQ-to-SQL查询在单个(或至少“原子”)查询中返回多个聚合函数

(我也说“明显”,因为对我的明确答案,在植物最小(p.ZoneMin),Max(p.ZoneMin)中,实际上检索整个表格两次,即使经过优化,然后使用Linq- to-Entities Min和Max获取结果:-()

我认为Aggregate并不是VB特定的,但它看起来像C#没有这个查询表达式,所以我将.net更改为vb.net.

虽然它不使用Aggregate关键字,但您可以使用以下语法在单个查询中执行多个函数
Dim query = From book In books _
    Group By key = book.Subject Into Group _
    Select id = key,_
        BookCount = Group.Count,_
        TotalPrice = Group.Sum(Function(_book) _book.Price),_
        LowPrice = Group.Min(Function(_book) _book.Price),_
        HighPrice = Group.Max(Function(_book) _book.Price),_
        AveragePrice = Group.Average(Function(_book) _book.Price)

尽管Aggregate子句实现似乎是一个问题.考虑来自Northwind的以下查询

Aggregate o in Orders
into Sum(o.Freight),Average(o.Freight),Max(o.Freight)

这会发生3个数据库请求.前两个执行单独的聚合子句.第三个将整个表拉回到客户端,并通过Linq到对象在客户端上执行Max.

猜你在找的VB相关文章