【发布时间】:2017-04-14 12:10:31
【问题描述】:
这是从 LINQ 生成的 T-SQL
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Hospital] AS [Extent1]
WHERE ( EXISTS (SELECT
1 AS [C1]
FROM ( SELECT
[Extent2].[ID] AS [ID]
FROM [dbo].[HospitalDepartment] AS [Extent2]
WHERE [Extent1].[ID] = [Extent2].[HospitalID]
) AS [Project1]
WHERE EXISTS (SELECT
1 AS [C1]
FROM ( SELECT
[Extent3].[ID] AS [ID]
FROM [dbo].[Unit] AS [Extent3]
WHERE [Project1].[ID] = [Extent3].[HospitalDepartmentID]
) AS [Project2]
WHERE EXISTS (SELECT
1 AS [C1]
FROM [dbo].[Device] AS [Extent4]
WHERE ([Project2].[ID] = [Extent4].[UnitID]) AND ([Extent4].[DeviceTypeID] IN (10,20))
)
)
我需要在下面的代码中使用 equal 而不是 IN,因为当我使用 IN 时,如果它 包含 10 或 20,它会返回结果,但我想要的是如果它 完全等于 10和20
WHERE EXISTS (SELECT
1 AS [C1]
FROM [dbo].[Device] AS [Extent4]
WHERE ([Project2].[ID] = [Extent4].[UnitID]) AND ([Extent4].[DeviceTypeID] IN (10,20))
)
这里是 Linq 源代码:
var query = db.Hospitals.AsQueryable();
if (DeviceTypeIDs != null)
{
IEnumerable<Guid> selectedDeviceTypeIDs = DeviceTypeIDs.Split(',').Select(Guid.Parse).AsEnumerable();
query = query.Where(j => j.HospitalDepartments.Any(jj => jj.Units.Any(m => m.Devices.Any(w => selectedDeviceTypeIDs.Contains(w.DeviceTypeID)))));
}
if (UnitTypeID != null)
{
query = query.Where(j => j.HospitalDepartments.Any(www => www.Units.Any(u => u.UnitTypeID == UnitTypeID)));
}
if (DirectorateOfHealthID != null)
{
query = query.Where(h => h.DirectorateHealthID == DirectorateOfHealthID);
}
query = query.Where(j => j.HospitalDepartments.Any(u => u.Units.Any(d => d.Devices.Any(s => s.Status == Enums.DeviceStatus.Free)))
&& j.HospitalDepartments.Any(hd => hd.Units.Any(u => u.Beds.Any(b => b.Status == Enums.BedStatus.Free))));
var list = query.ToList();
谢谢
【问题讨论】:
-
从
IN更改为=不会解决此问题。 -
不能满足条件“正好等于 10 AND 20”。向我们展示 LINQ 源代码和预期结果,以便我们了解您需要实现的目标。
-
AND ([Extent4].[DeviceTypeID] = 10,20) or ([Extent4].[DeviceTypeID] = 20) -
AND ([Extent4].[DeviceTypeID] = 10 OR Extent4].[DeviceTypeID] =20))
-
无论如何,添加 c# linq 源代码。显示生成的查询几乎没有价值。我不希望这里有人愿意对 LINQ 的三重嵌套存在进行逆向工程,除非他们也在 puzzling.stackexchange.com 上活跃
标签: c# sql sql-server linq