Csharp/C#教程:如何使用Exact数组值而不是包含分享


如何使用Exact数组值而不是包含

我需要使用Equals方法或类似的东西,而不是使用Contains方法,因为我想在数据库中搜索selectedDeviceTypeIDs数组中的确切值而不是任何一个。

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

这是我的完整代码

 public HttpResponseMessage GetAvailableHospitalsByAjax(System.Guid? DirectorateOfHealthID = null, System.Guid? UnitTypeID = null, string DeviceTypeIDs = null) { Context db = new Context(); var query = db.Hospitals.AsQueryable(); if (DeviceTypeIDs != null) { IEnumerable 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(); return Request.CreateResponse(HttpStatusCode.OK, list); } 

您的问题不是Contains()而是使用查询中使用的Any()方法,它会在找到DeviceTypeID在提供的selectedDeviceTypeIDs列表中的设备后立即返回true

如果您需要检查单元中的所有设备是否与列表中的所有项目匹配,您可以使用:

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

请注意,如果您在selectedDeviceTypeIDs有重复的项目,但在UnitDevices中没有,则它仍将返回true。

上述就是C#学习教程:如何使用Exact数组值而不是包含分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1042032.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

精彩推荐