我需要使用equal而不是Contains。 我有一个名为selectedDeviceTypeIDs的代码数组我假设它有两个代码{1,2}
如果设备ID完全是{1,2},我需要从查询中获取结果,所以我用selectedDeviceTypeIDs.equal或类似的东西替换selectedDeviceTypeIDs.Contains ...
m => m.Devices.Any(w => selectedDeviceTypeIDs.Contains(w.DeviceTypeID)
if (DeviceTypeIDs != null)
{
Guid[] selectedDeviceTypeIDs = DeviceTypeIDs.Split(',').Select(Guid.Parse).ToArray();
query = query.Where(j => j.HospitalDepartments.Any(jj => jj.Units.Any(m => m.Devices.Any(w => selectedDeviceTypeIDs.Contains(w.DeviceTypeID)))));
}
答案 0 :(得分:0)
选项1:
如果您关心项目的顺序,请使用SequenceEqual
扩展方法。即使集合中的项目具有不同的顺序
m => m.Devices.Any(w => selectedDeviceTypeIDs.SequenceEqual(w.DeviceTypeID)
选项2:
如果您不关心订单,请使用All
扩展方法。如果两个集合中的项目无关,则返回true。
m => m.Devices.Any(w => selectedDeviceTypeIDs.All(w.DeviceTypeID.Contains)
答案 1 :(得分:0)
使用!。除了()。任何()以确保 m.Devices 不包含任何 DeviceTypeID <强> selectedDeviceTypeIDs 强>
query = query.Where(j => j.HospitalDepartments.Any(jj => jj.Units
.Where(m => !m.Devices.Select(w => w.DeviceTypeID).Except(selectedDeviceTypeIDs).Any())));
答案 2 :(得分:0)
您需要检查selectedDeviceTypeIDs
是否包含每个设备,以及每个设备是否包含selectedDeviceTypeIDs
。你可以用这个:
query = query
.Where(j =>
j.HospitalDepartments.Any(jj =>
jj.Units.Any(m =>
m.Devices.All(
w => selectedDeviceTypeIDs.Contains(w.DeviceTypeID))
&&
selectedDeviceTypeIDs.All(
g => m.Devices.Select(d => d.DeviceTypeID).Contains(g))
)
)
);