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)) ) ) );