使用嵌套的select语句对LINQ转换进行SQL查询

时间:2015-05-29 11:54:33

标签: c# linq

我想将以下查询转换为LINQ:

 SELECT LV.* FROM LowerVehicles LV
 INNER JOIN (Select VSerial,MAX(updatedOn) MaxUpdatedOn from LowerVehicles group by vserial) LVG
 ON LV.VSerial = LVG.VSerial AND LV.updatedOn = LVG.MaxUpdatedOn

2 个答案:

答案 0 :(得分:0)

这样的东西?

Something.LowerVehicles
.Join(something.LowerVehicles.Select(y => new { y.VSerial, updatedOn = y.updatedOn.Max() }).GroupBy(z => z.VSerial), 
 x => new { x.VSerial, x.updatedOn }, 
 lvg => new { lvg.VSerial, lvg.updatedOn }, 
 (x, y) => x)

答案 1 :(得分:0)

不知道您的实体类,这里是近似值。您可以使用查询语法或流利语法。有时一个优于另一个,在连接和分组的情况下,我更喜欢使用查询语法。

QUERY SYNTAX

var query = from LV in LowerVehicles
        join LVG in (
        from r in LowerVehicles
        group r by r.vserial into g
        select new {VSerial = g.Key, MaxUpdatedOn = g.Max(t => t.updatedOn)})
        on LV.VSerial equals LVG.Vserial
        and LV.updatedOn equals LVG.MaxUpdatedOn
        select LV;

FLUENT SYNTAX

var lvg = LowerVehicles.GroupBy(t => t.vserial)
                       .Select(g => new { 
                                           VSerial = g.Key, 
                                           MaxUpdatedOn = g.Max(t => t.updatedOn) 
                                        });

var query = LowerVehicles.Join( 
                                lvg, 
                                a => new { a.VSerial, a.updatedOn }, 
                                b => new { b.VSerial, b.MaxUpdatedOn }, 
                                (a, b) => new { LV = a, LVG = b}
                              )
                         .Select(t=> t.LV);