2012-08-15 51 views
0

注意更新时间:所有的任何和所有帮助 谢谢,对于那些精明的vb.net这里是自包含的例子...LINQ到与多骨料,总结和Max SQL

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 

所以在这个例子中我想只有最高SumKB返回(12)dev0db05 我知道我必须做一个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 
+0

'q.Max(功能(X)x.SumKB)' – 2012-08-15 21:37:39

+0

感谢您的快速反应,unfortuanatly我得到: – user1601714 2012-08-15 21:43:12

+0

范围变量名可以只从一个简单的推断或没有参数的限定名称。 – user1601714 2012-08-15 21:43:51

回答

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?) 

返回6 dev0db05