Maison >développement back-end >C++ >Comment créer des clauses WHERE dynamiques dans LINQ pour un filtrage flexible des données ?
Lorsque vous utilisez des requêtes LINQ, vous devrez peut-être générer dynamiquement des clauses WHERE basées sur les entrées de l'utilisateur. Ceci peut être réalisé en enchaînant plusieurs clauses WHERE, comme dans l'exemple suivant :
La méthodeGetProductList()
accepte un dictionnaire comme paramètre, qui représente un ensemble de conditions de filtre. Ensuite, utilisez une clause Where pour créer une requête LINQ afin de filtrer les résultats en fonction des conditions du dictionnaire.
Chaque clause Where est ajoutée à la requête en vérifiant si la clé correspondante existe dans le dictionnaire. Le cas échéant, filtre la requête en fonction de la valeur associée à cette clé.
L'exemple de code suivant montre comment implémenter cette méthode :
<code class="language-csharp">public IOrderedQueryable<productdetail> GetProductList(string productGroupName, string productTypeName, Dictionary<string, List<string>> filterDictionary) { var q = from c in db.ProductDetail where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName select c; //添加select c;避免编译错误 foreach (var filter in filterDictionary) { var fieldName = filter.Key; var values = filter.Value; if (values.Count > 0) { q = q.Where(c => values.Contains(c.GetType().GetProperty(fieldName).GetValue(c, null)?.ToString())); } } return q.OrderBy(c => c.ProductTypeName); }</code>
Vous pouvez créer des requêtes LINQ ciblant des critères de recherche spécifiques en générant dynamiquement des clauses WHERE basées sur les entrées de l'utilisateur. Cette approche offre de la flexibilité et permet un filtrage facile des données en fonction de paramètres définis par l'utilisateur. Notez que ce code suppose que la valeur de filterDictionary
est List<string>
et que le nom d'attribut de l'objet ProductDetail
est cohérent avec le nom de clé de filterDictionary
. Pour un traitement plus robuste, il est recommandé d'ajouter la gestion des exceptions et la vérification du nom d'attribut.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!