【问题标题】:how to get the linq list having Ids from IEnumerable<Object>如何从 IEnumerable<Object> 获取具有 Ids 的 linq 列表
【发布时间】:2020-04-20 08:42:50
【问题描述】:

userModel.Carriers 下面的代码是IEnumerable&lt;CarrierModel&gt; 的类型。 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();

【问题讨论】:

    标签: linq ienumerable


    【解决方案1】:

    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 返回IEnumerable(不是数据库),那么我建议创建运营商ID 的HashSet

    var carrierIds = userModel.Carriers.Select(carrier => carrier.Id).ToHashSet();
    
    var divisions = db.CarrierDivision
        .Where(division => carrierIds.Contains(division.CarrierId))
        .ToArray();
    

    在没有额外枚举的情况下执行HashSet 搜索 - O(1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多