我的EF模型中有下面两个表。
Table'Equipo':该表包含设备。主键是等号
Id | equipoId | Description
1 9474
2 9473
3 9475
表'CalibracionVerificacion':该表包含每个设备的校准数据。主键是ID。
Id | equipoId | magnitudId | fechaPrevista1 9474 0402 2020-05-01 00:00:00.0002 9474 0808 2020-01-01 00:00:00.0003 9474 0101 2019-12-19 00:00:00.0004 9473 2001 2018-02-08 00:00:00.0005 9473 1901 2019-05-23 00:00:00.0006 9473 1901 2017-08-17 00:00:00.0007 9472 0808 2020-11-11 00:00:00.0008 9472 0101 2019-01-01 00:00:00.000
我需要遍历表Equipo中的每个设备,并对每个设备执行以下步骤:
所以我在LINQ表达式下面执行:
LINQ表达式
:Dim eq = db.Equipo For Each equipo As Equipo In eq Dim fechaPrevista As DateTime? = (From c In equipo.CalibracionVerificacion Join c2 In (From c3 In equipo.CalibracionVerificacion Where c3.equipoId = equipo.equipoId AndAlso Not (String.IsNullOrWhiteSpace(c3.magnitudId)) Group c3 By c3.magnitudId Into cgroup = Group Select New With { Key .MagnitudID = magnitudId, Key .MaxDate = cgroup.Max(Function(x) x.fechaPrevista) } ) On New With {.JoinProperty1 = c.magnitudId, .JoinProperty2 = c.fechaPrevista} Equals New With {.JoinProperty1 = c2.MagnitudID, .JoinProperty2 = c2.MaxDate} Where c.equipoId = equipo.equipoId Select c).Min(Function(d) d.fechaPrevista)) // Do something with fechaPrevista Next
例如,考虑到上表,对于equipoId = 9474,我想获取最早的日期和时间,即2019-12-19 00:00:00.000,但由于fechaPrevista,我一无所获。假设在此示例中equipo.equipoId = 9474:
我一直在单独调试Linq查询,并得到以下内容(内部Linq表达式):
Dim c23 = From c3 In equipo.CalibracionVerificacion Where c3.equipoId = equipo.equipoId AndAlso Not (String.IsNullOrWhiteSpace(c3.magnitudId)) Group c3 By c3.magnitudId Into cgroup = Group Select New With { Key .MagnitudID = magnitudId, Key .MaxDate = cgroup.Max(Function(x) x.fechaPrevista) }
此LINQ查询正在工作,并返回以下结果:
因此内部LINQ表达式运行正常。问题在于外部LINQ表达式,连接失败,然后返回Nothing作为结果。我不懂为什么。有什么想法吗?
基本上翻译成SQL Server的LINQ表达式是(例如,为简化起见,因为一个equipoId是:):
-- Region Parameters
DECLARE @p0 Int = 9474
DECLARE @p1 Int = 9474
-- EndRegion
SELECT MIN([t0].[fechaPrevista]) AS [value]
FROM [eq].[CalibracionVerificacion] AS [t0]
INNER JOIN (
SELECT MAX([t1].[fechaPrevista]) AS [value], [t1].[magnitudId]
FROM [eq].[CalibracionVerificacion] AS [t1]
WHERE [t1].[equipoId] = @p0
GROUP BY [t1].[magnitudId]
) AS [t2] ON ([t0].[magnitudId] = [t2].[magnitudId]) AND ([t0].[fechaPrevista] = [t2].[value])
WHERE [t0].[equipoId] = @p1
我的EF模型中有两个表格。表'Equipo':该表包含设备。主键是等号ID | equipoId |说明1 9474 2 9473 3 9475表'...
[使用LINQ,声明式思考(即,根据所需结果)比命令式思考(即控制流)有所帮助。据我所知,最终您要遍历具有以下属性/字段的结果集: