2012-03-08 194 views
0

我试图从一个表中获取字段并从另一个表中获取max(expirationDate)。这是我原来的LINQ查询:linq查询,将sql查询转换为linq for VB.net

      tanks = (From t In db.Table1 _ 
          Where t.CompanyID = txtCompanyID.Text.Trim() _ 
          Join d In db.Table2 On t.TankID Equals d.TankID 
          Order By d.ExpireDate Descending 
          Select t).ToList 

带来回多expireDates,我只希望最大(EXPIREDATE)为每个记录

下面的SQL查询的工作,我只是需要把它放到一个LINQ查询

select t1.*, 
(Select MAX(Table2.ExpireDate) 
from Table2 as t2 
where t2.TankID = t1.TankID) 
as max_expire_date 
     from Table1 as t1 
     where t1.CompanyID = '5467' 
     order by t1.CargoTankID 

有没有人知道如何得到这个linq?由于

回答

0
tanks = db.Table1.Where(t => t.CompanyId == txtCompanyID.Text.Trim()) 
       .Join(db.Table2, t1 => t1.TankID, t2 => t2.TankID, (t1,t2) => new { Company = t1, t2.ExpireDate }) 
       .GroupBy(t => t.Company, (c,e) => new { Company = c Expiration = e.Max(x => x.ExpireDate) }) 
       .ToList(); 

最佳猜测VB

Dim tanks = db.Table1.Where(Function(t) t.CompanyId == txtCompanyID.Text.Trim()) _ 
        .Join(db.Table2, Function(t1) t1.TankID, Function(t2) t2.TankID, Function(t1,t2) New Thing With { .Company = t1, .ExpireDate = t2.ExpireDate }) _ 
        .GroupBy(Function(t) t.Company, Function(c,e) New Thing With { .Company = c, .Expiration = e.Max(Function(x) x.ExpireDate) }) _ 
        .ToList() 
+0

你知道如何在vb.Net做到这一点。我是linq新手,但我知道c#和vb之间的语法不同 – user1202606 2012-03-08 23:26:19

+0

它应该非常相似,只需将lambda表达式转换为适当的语法即可。我认为我已经添加了应该工作。 – tvanfosson 2012-03-08 23:34:53