LINQ等于而不是包含

时间:2017-04-10 12:28:50

标签: c# sql 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)))));
}

3 个答案:

答案 0 :(得分:0)

选项1:

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

,也会返回false
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))
        )
    )
);