加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-17 00:13:56 所属栏目:大数据 来源:网络整理
导读:当用作具有多个Into子句的 Linq表达式的第一个(外部)子句时,VB.NET的聚合查询是否有致命的缺陷,因为每个Into子句都是单独执行的? SELECT MIN(ZoneMin),MAX(ZoneMin) FROM Plant in LINQ to SQL的“明显”答案是 Dim limits = Aggregate p In Plants Select
当用作具有多个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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读