C# LINQ:我如何在查询中使用Equals

C# LINQ:我如何在查询中使用Equals,c#,sql-server,entity-framework,linq,C#,Sql Server,Entity Framework,Linq,我需要使用Equals方法或类似的方法,而不是使用Contains方法,因为我希望在数据库中搜索selectedDeviceTypeIDs数组中的确切值,而不是其中的任何值 IEnumerable<Guid> selectedDeviceTypeIDs = DeviceTypeIDs .Split(',') .Select( Guid.Parse ) .AsEnumerable(); query = query .Where( j =>

我需要使用Equals方法或类似的方法,而不是使用Contains方法,因为我希望在数据库中搜索selectedDeviceTypeIDs数组中的确切值,而不是其中的任何值

 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,列表); }
如果
foo.Contains()
中的
foo
IList
的,EF6支持
中的SQL
运算符,例如,此Linq:

Int32[] desired = new Int32[] { 1, 2, 3, 4 };

IQueryable<Item> itemsQuery = db.Items.Where( item => desired.Contains( item.SomeValue ) );

我不完全确定具体细节,但我认为如果您将
selectedDeviceTypeId
IQueryable
转换为
Guid[]
(或至少
IList
),EF也会在
查询中为您生成

当前Linq在运行时生成什么SQL?您确定它没有在
中使用
?为什么问这个问题?如果一个问题没有得到想要的回答,你应该改进它,而不是重新发布。谢谢你的帮助:)是的,生成的t-sql在。。。IN的问题是,当您从(1、2、3、4)中的某个值所在的项目中选择Item.*时,如果它找到(1或2或3或4),则将返回结果。。。我不知道。。我要选择项。*从SomeValue等于(1,2,3,4)的项中得到t?@Tom Oh-你想让子项的整个序列匹配吗?是的,没错
SELECT Item.* FROM Items WHERE SomeValue IN ( 1, 2, 3, 4 )