如何从 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)