LINQ等于而不是包含

我需要使用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))))); } 

使用!.Except()。Any()以确保m.Devices不包含selectedDeviceTypeIDs中不存在的任何DeviceTypeID

 query = query.Where(j => j.HospitalDepartments.Any(jj => jj.Units .Where(m => !m.Devices.Select(w => w.DeviceTypeID).Except(selectedDeviceTypeIDs).Any()))); 

选项1:

如果您关心项目的SequenceEqual ,请使用SequenceEqual扩展方法。 即使集合中的项目具有不同的顺序,这也将返回false

 m => m.Devices.Any(w => selectedDeviceTypeIDs.SequenceEqual(w.DeviceTypeID) 

选项2:

如果您不关心订单,请使用All扩展方法。 如果两个集合中的项目无论顺序如何都相同,则返回true。

 m => m.Devices.Any(w => selectedDeviceTypeIDs.All(w.DeviceTypeID.Contains) 

您需要检查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)) ) ) );