C# 使用嵌套select语句的SQL查询到LINQ转换

C# 使用嵌套select语句的SQL查询到LINQ转换,c#,linq,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 像这样的 Something.LowerVehicles .Join(s

我想将以下查询转换为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
像这样的

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)

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

查询语法

流畅的语法


首先为嵌套的select编写查询,在使用该变量编写第二个select后将其保存在变量中。您应该首先向我们展示您的工作。如果你在任何时候被击中,我们都会帮助你。这里似乎没有问题。向我们展示您的尝试和您看到的任何错误,我们很乐意伸出援助之手!
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;
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);