【发布时间】:2017-06-06 20:44:30
【问题描述】:
我必须将以下表达式从 VB.NET 转换为 C#:
Dim z = From d In db.GPSdevice
Where d.CompanyId = currentuser.CompanyId And d.Type = "Trailer"
Order By d.ListOrder Descending
Group d By Geofence = d.GeofenceLocation Into g = Group, Count()
Order By Count Descending
我对 Group By 部分感到困惑...
【问题讨论】:
-
次要的挑剔,
And应该是AndAlso。And是位与运算符,而不是逻辑与。 -
@JeffMercado 与一些 LINQ 提供程序,您必须使用
And或单独的Where查询,因为 SQL 没有任何短路的概念 -
@JacobKrall,这无关紧要,这是在这种情况下错误地使用了运算符并且没有实际效果。 如果它是相关的,那么查询提供者的工作就是根据数据源的要求构建查询。
-
如果您编译您的 VB 程序,然后使用 dotPeek 或 Reflector 反编译为 C# - 它显示的代码是什么?
-
@JeffMercado 这实际上是错误的。并且是 both 逻辑联合和按位运算符。 AndAlso 是 short-circuited 联合运算符。为了使 AndAlso 工作,提供者必须实现它。虽然他们可能已经这样做了,但有可能获得一个不实现所有运算符的提供程序。但总的来说,两者都是安全的,如果提供商支持短路,最好使用 AndAlso。如果不支持短路,但实现了操作符,执行上没有区别。