C# 如何使用精确的数组值而不是包含
我需要使用Equals方法或类似的方法,而不是使用Contains方法,因为我想在数据库中搜索C# 如何使用精确的数组值而不是包含,c#,sql-server,entity-framework,linq,C#,Sql Server,Entity Framework,Linq,我需要使用Equals方法或类似的方法,而不是使用Contains方法,因为我想在数据库中搜索selectedDeviceTypeId数组中的确切值,而不是其中的任何值 IEnumerable<Guid> selectedDeviceTypeIDs = DeviceTypeIDs .Split(',') .Select( Guid.Parse ) .AsEnumerable(); query = query .Where( j =>
selectedDeviceTypeId
数组中的确切值,而不是其中的任何值
IEnumerable<Guid> 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 )
)
)
)
);
IEnumerable SelectedDeviceTypeId=DeviceTypeId
.Split(“,”)
.Select(Guid.Parse)
.AsEnumerable();
查询=查询
.其中(j=>
j、 医院科室。任何(jj=>
jj.单位。任意(m=>
m、 设备。任何(w=>
SelectedDeviceTypeId.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<Guid> 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);
}
公共HttpResponseMessage GetAvailableHospitalsByAjax(System.Guid?DirectorateOfHealthID=null,System.Guid?UnitTypeID=null,string DeviceTypeId=null)
{
Context db=newcontext();
var query=db.Hospitals.AsQueryable();
if(DeviceTypeId!=null)
{
IEnumerable selectedDeviceTypeId=DeviceTypeId.Split(',).Select(Guid.Parse.AsEnumerable();
query=query.Where(j=>j.HospitalDepartments.Any(jj=>jj.Units.Any)(m=>m.Devices.Any(w=>selectedDeviceTypeId.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.医院科室。任何(hd=>hd.Units.Any(u=>u.Beds.Any(b=>b.Status==Enums.BedStatus.Free));
var list=query.ToList();
返回请求.CreateResponse(HttpStatusCode.OK,列表);
}
问题不在于
Contains()
,而在于查询中使用的Any()
方法,该方法在找到DeviceTypeID
位于提供的selectedDeviceTypeId
列表中的设备后,将立即返回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))
)
)
);
请注意,如果您在
单元的所选设备类型ID
中有重复项,但在设备
中没有重复项,它仍将返回true。我不清楚您的问题是什么。你说的“精确值”是什么意思?你能给出一个内容的例子和你期望结果是什么吗?旁注-.AsEnumerable()
是多余的-它已经是一个IEnumerable
,你需要加入<代码>来自arr中x的db记录,其中。。。选择…