代码之家  ›  专栏  ›  技术社区  ›  pnizzle

实体框架和LINQ查询

  •  -1
  • pnizzle  · 技术社区  · 6 年前

    在下面的查询构建中,是否有任何原因 Where 条款 B 与…分离 在哪里? 条款 A ?

    truckList = (from truck in _dbcontext.Truck.Where(x => x.ClientId == clientId) //(A)
        join comp in _dbcontext.TruckComponent
        on truck.Equipment.ProtId equals comp.ComponentId
        where truck.EquipmentId > 0 && truck.FieldId > 0 //B
        select NewTruckVmFromDbTruck(truck, comp)).AsEnumerable();
    

    他们能不能加入A或B?例如:

    truckList = (from truck in _dbcontext.Truck.Where(
                    x => x.ClientId == clientId && 
                    truck.EquipmentId > 0 && 
                    truck.FieldId > 0)
                    ...rest of query...
                 )
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   NetMage    6 年前

    最好不要混合使用fluent和lambda查询语法,如何处理:

    truckList = (from truck in _dbcontext.Truck
                 where truck.EquipmentId > 0 && truck.FieldId > 0 && truck.ClientId == clientId
                 join comp in _dbcontext.TruckComponent on truck.Equipment.ProtId equals comp.ComponentId
                 select NewTruckVmFromDbTruck(truck, comp)).AsEnumerable();
    
        2
  •  -1
  •   mysayasan    6 年前

    这是因为“卡车”和“压缩机”来自不同的表

    truckList = (from truck in _dbcontext.Truck.Where(x => x.ClientId == clientId) //(A)
    join comp in _dbcontext.TruckComponent
    on truck.Equipment.ProtId equals comp.ComponentId
    where truck.EquipmentId > 0 && truck.FieldId > 0 //B
    select NewTruckVmFromDbTruck(truck, comp)).AsEnumerable();
    

    卡车来自一张叫做“卡车”的桌子,而 comp来自名为“truckcomponent”的表

    如果只选择' 卡车 “桌子,你不会得到的” 卡车部件 表数据。

    select NewTruckVmFromDbTruck(truck)).AsEnumerable();
    

    希望这有帮助