动态查询2种实体类型,并将结果映射回特定的实体集

本文关键字:实体 映射 结果 2种 查询 类型 动态 | 更新日期: 2023-09-27 18:06:31

我们的数据库中有一些表是标准化的,即一个表应该继承另一个表的字段。

例如:

'Vehicle' fields:
 - SpecificType
 - SerialNumber
'Car' fields:
 - FuelType
'Boat' fields:
 - HullSize

如果用户搜索SerialNumber和FuelType,我知道我需要返回一个Car,但我不想分两步执行搜索:

 1. List<Vehicles> SearchVehicles( serialNumber )
 2. List<Cars> SearchCars(List<Vehicles>, FuelType) // From the list of Vehicles, query all Cars with specified FuelType

是否有一种方法来写一个通用的方法使用Linq,可以给我想要的结果?

我把Dapper框架看作是动态构建标准的一种手段,但我不确定是否有更好的方法(实践),我想看看还有什么其他的选择。

动态查询2种实体类型,并将结果映射回特定的实体集

希望对你有帮助

按燃料类型搜索所有汽车,使用:

private static List<Car> SearchCars(List<Vehicle> vehicles, FuelType fueltype)
{
   return vehicles.Where(f =>f is Car && (f as Car).FuelType == fueltype) 
          .Select(x => (Car)x).ToList();
}

如果您还想按SerialNumber筛选用途:

private static List<Car> SearchCars(List<Vehicle> vehicles, FuelType fueltype,          string serialnumber)
 {
   return vehicles.Where(f =>f.SerialNumber==serialnumber && f is Car 
                         && (f as Car).FuelType == fueltype)
                  .Select(x => (Car)x).ToList();
 }