Nous avons des tables dans notre base de données qui sont normalisées dans le sens où l’un doit hériter des champs de l’autre.
Donc, par exemple:
'Vehicle' fields:
- SpecificType
- SerialNumber
'Car' fields:
- FuelType
'Boat' fields:
- HullSize
Si l'utilisateur a effectué une recherche sur SerialNumber et FuelType, je sais que je dois renvoyer une voiture, mais je ne souhaite pas exécuter la recherche en deux étapes:
1. List<Vehicles> SearchVehicles( serialNumber )
2. List<Cars> SearchCars(List<Vehicles>, FuelType) // From the list of Vehicles, query all Cars with specified FuelType
Est-il possible d'écrire une méthode générique utilisant Linq qui pourrait me donner le résultat souhaité?
J'ai regardé le framework Dapper comme un moyen de construire dynamiquement des critères, mais je ne suis pas sûr qu'il y ait un meilleur moyen (pratique), et j'aimerais voir quelles sont les autres options.
J'espère que ceci peut vous aider
Pour rechercher toutes les voitures par type de carburant, utilisez:
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();
}
Si vous souhaitez également filtrer par numéro de série Utilisez:
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();
}