繁体   English   中英

C# 实体框架和 Linq 查询

[英]C# Entity Framework and Linq query

在下面的查询构建中,是否有任何理由Where子句BWhere子句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...
             )

无论如何,最好不要混合 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();

这是因为 'truck' 和 'comp' 来自不同的表

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();

卡车来自名为“Truck”的表,而comp来自名为“TruckComponent”的表

两者都有不同的身份,如果你只选择' Truck '表,你不会得到' TruckComponent '表数据。

select NewTruckVmFromDbTruck(truck)).AsEnumerable();

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM