如何从 IEnumerable<Object> 获取具有 ID 的 linq 列表
how to get the linq list having Ids from IEnumerable<Object>
userModel.Carriers
下面的代码是IEnumerable<CarrierModel>
的类型。
userModel.Carriers
有一个具有 ID 的运营商列表。有了这些 ID,我想获得 CarrierDivision usign linq。但是,我无法正确处理,因为 linq sqlexpression is not compatible with IEnumerable expression
。
userModel.Carriers = carriersForRegion.Select(carrier => Mapper.Map<CarrierModel>(carrier))
.ToList();
var carrierDivision = from c in db.CarrierDivision where c.Contains();
collection.Contains
将生成 .. WHERE CarrierId IN (1, 2, 3)
sql 查询
var carrierIds = userModel.Carriers.Select(carrier => carrier.Id).ToArray();
var divisions = db.CarrierDivision
.Where(division => carrierIds.Contains(division.CarrierId))
.ToArray();
如果 db.CarrierDivision
returns IEnumerable
(不是数据库),那么我建议创建 HashSet
运营商 ID。
var carrierIds = userModel.Carriers.Select(carrier => carrier.Id).ToHashSet();
var divisions = db.CarrierDivision
.Where(division => carrierIds.Contains(division.CarrierId))
.ToArray();
HashSet
执行搜索时没有额外的枚举 - O(1)
userModel.Carriers
下面的代码是IEnumerable<CarrierModel>
的类型。
userModel.Carriers
有一个具有 ID 的运营商列表。有了这些 ID,我想获得 CarrierDivision usign linq。但是,我无法正确处理,因为 linq sqlexpression is not compatible with IEnumerable expression
。
userModel.Carriers = carriersForRegion.Select(carrier => Mapper.Map<CarrierModel>(carrier))
.ToList();
var carrierDivision = from c in db.CarrierDivision where c.Contains();
collection.Contains
将生成 .. WHERE CarrierId IN (1, 2, 3)
sql 查询
var carrierIds = userModel.Carriers.Select(carrier => carrier.Id).ToArray();
var divisions = db.CarrierDivision
.Where(division => carrierIds.Contains(division.CarrierId))
.ToArray();
如果 db.CarrierDivision
returns IEnumerable
(不是数据库),那么我建议创建 HashSet
运营商 ID。
var carrierIds = userModel.Carriers.Select(carrier => carrier.Id).ToHashSet();
var divisions = db.CarrierDivision
.Where(division => carrierIds.Contains(division.CarrierId))
.ToArray();
HashSet
执行搜索时没有额外的枚举 - O(1)