Linq to SQL with Multiple Aggregates,Sum and Max

时间:2012-08-15 21:34:05

标签: vb.net linq

注意已更新: 感谢所有人的帮助,对于那些精通vb.net的人来说,这是一个自包含的例子......

Structure Stuff
        public client as String
        public BDate as DateTime
        public KB as long
        public sub new(client as string, BDate as DateTime, KB as Long)
            Me.client = client
            Me.BDate = BDate
            Me.KB = KB
        end sub
    End Structure
Sub Main

Dim Stuffs as new List(Of Stuff)
Stuffs.Add(new Stuff("dev0db05", "6/25/2012  7:00:35 AM",1))
Stuffs.Add(new Stuff("dev0db05", "6/25/2012  7:00:35 AM",1))
Stuffs.Add(new Stuff("dev0db05", "6/25/2012  7:00:35 AM",1))
Stuffs.Add(new Stuff("dev0db05", "6/26/2012  7:00:35 AM",2))
Stuffs.Add(new Stuff("dev0db05", "6/26/2012  7:00:35 AM",2))
Stuffs.Add(new Stuff("dev0db05", "6/26/2012  7:00:35 AM",2))
Stuffs.Add(new Stuff("dev0db05", "6/27/2012  7:00:35 AM",3))
Stuffs.Add(new Stuff("dev0db05", "6/27/2012  7:00:35 AM",3))
Stuffs.Add(new Stuff("dev0db05", "6/27/2012  7:00:35 AM",3))
Stuffs.Add(new Stuff("dev0db05", "6/28/2012  7:00:35 AM",4))
Stuffs.Add(new Stuff("dev0db05", "6/28/2012  7:00:35 AM",4))
Stuffs.Add(new Stuff("dev0db05", "6/28/2012  7:00:35 AM",4))

dim q = From c In Stuffs _
  where c.client= "dev0db05" _
  order by c.BDate _
  group c by c.Client,c.bdate into g = group _
  select ClientName = Client, BDate = DateTime.Parse(bdate).ToShortDateString, SumKB = g.sum(Function(p) p.kb)

Output:
ClientName BDate SumKB 
dev0db05 6/25/2012 3 
dev0db05 6/26/2012 6 
dev0db05 6/27/2012 9 
dev0db05 6/28/2012 12 

所以在这个例子中,我想只为dev0db05返回最高的SumKB(12) 我知道我必须做一个MAX,但不知道如何反对上述... 谢谢,可能太简单但我不知所措......

对于以下Linq查询,如何仅返回最高值,即259835919? 谢谢!我是新手并试图理解。

dim q = From c In Stuff _
where c.client= "dev0db05" _
where c.policy = "mcg-oracle-db" _
order by c.BackupDate _
group c by key = 0, c.Client,c.backupdate into g = group _
select ClientName = Client, BDate = DateTime.Parse(backupdate).ToShortDateString, SumKB = g.sum(Function(p) p.kilobytes)

返回:

dev0db05    5/20/2012   163160396
dev0db05    5/27/2012   235918153
dev0db05    6/3/2012    259813647
dev0db05    6/10/2012   259835151
dev0db05    6/13/2012   23824838
dev0db05    6/14/2012   259578160
dev0db05    6/15/2012   23864427
dev0db05    6/16/2012   259578127
**dev0db05  6/17/2012   259835919**
dev0db05    6/18/2012   23858283
dev0db05    6/19/2012   259575055
dev0db05    6/20/2012   33412

1 个答案:

答案 0 :(得分:0)

好的以下是解决方案。这是最有效的方法吗?

Structure Stuff
  public client as String
  public BackupDate as DateTime
  public Kilobytes as double
  public sub new(client as string, BackupDate as DateTime, Kilobytes as double)
  Me.client = client
  Me.BackupDate = BackupDate
  Me.Kilobytes = Kilobytes
  end sub
End Structure

Sub Main
Dim Stuffs as new list(Of Stuff)
Stuffs.Add(new Stuff("dev0db05", "6/25/2012  7:00:35 AM",1))
Stuffs.Add(new Stuff("dev0db05", "6/25/2012  7:00:35 AM",1))
Stuffs.Add(new Stuff("dev0db05", "6/25/2012  7:00:35 AM",1))
Stuffs.Add(new Stuff("dev0db05", "6/26/2012  7:00:35 AM",2))
Stuffs.Add(new Stuff("dev0db05", "6/26/2012  7:00:35 AM",2))
Stuffs.Add(new Stuff("dev0db05", "6/26/2012  7:00:35 AM",2))
Stuffs.Add(new Stuff("dev0db06", "6/27/2012  7:00:35 AM",3))
Stuffs.Add(new Stuff("dev0db06", "6/27/2012  7:00:35 AM",3))
Stuffs.Add(new Stuff("dev0db06", "6/27/2012  7:00:35 AM",3))
Stuffs.Add(new Stuff("dev0db06", "6/28/2012  7:00:35 AM",4))
Stuffs.Add(new Stuff("dev0db06", "6/28/2012  7:00:35 AM",4))
Stuffs.Add(new Stuff("dev0db06", "6/28/2012  7:00:35 AM",4))
Stuffs.Add(new Stuff("dev0db09", "6/27/2012  7:00:35 AM",5))
Stuffs.Add(new Stuff("dev0db09", "6/27/2012  7:00:35 AM",5))
Stuffs.Add(new Stuff("dev0db09", "6/27/2012  7:00:35 AM",5))
Stuffs.Add(new Stuff("dev0db03", "6/28/2012  7:00:35 AM",6))
Stuffs.Add(new Stuff("dev0db03", "6/28/2012  7:00:35 AM",6))
Stuffs.Add(new Stuff("dev0db03", "6/28/2012  7:00:35 AM",6))

dim jj = From t1 In ((From t0 In Stuffs _
  Group t0 By t0.Client,t0.BackupDate Into g = Group  _
  Select SumKB = CType(g.Sum(Function(p) p.Kilobytes),long?),Client,BDate = CStr(CDate(BackupDate)))) _
where t1.client = "dev0db05" _
Group t1 By t1.Client Into g = Group  _
Select Client, MaxKB = CType(g.Max(Function(p) p.SumKB),long?) 

dev0db05

返回6
相关问题