0
Containsメソッドを使用する代わりにEqualsメソッドなどを使用する必要があります。データベース内の正確な値を配列selectedDeviceTypeIDs
で検索したいからです。ここでContainsの代わりにExact配列の値を使用する方法
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)
)
)
)
);
私の完全なコードは、あなたの問題はContains()
ではないが、それはそのDeviceTypeID
にあるデバイスを発見した直後に真を返します。クエリで使用Any()
方法で
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);
}
あなたの質問が何であるかはっきりしません。 「正確な値」はどういう意味ですか?あなたは内容の例と結果が期待されるものを挙げることができますか? –
サイドノート - '.AsEnumerable()'は冗長です - 既に 'IEnumerable'です –
あなたはそれに参加する必要があります。 'arからxのレコードを取得する場所from ... select ...' – abatishchev