IncludeFilter inGeneric Repository


Question

J'ai besoin de filtre dans comprend également. J'ai le statut d'enregistrement dans toutes les tables. J'ai donc besoin de filtrer les enregistrements en fonction de cela. Pour y remédier , j'utilise la méthode IncludeFilter de Z.EntityFramework.Plus .

Mon code de données générique ci-dessous;

    public async Task<T> GetAsync(int id, params Expression<Func<T, object>>[] includes)
    {
        var query = _context.Set<T>().AsQueryable(); //.FindAsync(id);

        if (includes.Length > 0)
        {
            query = includes.Aggregate(query,
              (current, include) => current.IncludeFilter(include));
        }
        var item = await query.FirstOrDefaultAsync(x => x.Id == id);
        return item;
    }

Lorsque j'inclue la condition Where de la méthode d'appel (classe affaires), elle fonctionne correctement. Mais je ne veux pas inclure ces où la condition dans tous les lieux. J'ai donc besoin de changer cette méthode pour inclure la condition where ici.

S'il vous plaît aidez-moi à faire. Je n'ai pas eu d'extension où dans mon paramètre d'inclusion

Remarque: je dois inclure où condition dans chacune des inclure.

Réponse populaire

En théorie, vous pourriez faire en sorte que tous vos types d'entité implémentent une interface ( IRecord ?) Avec la propriété RecordStatus .

Ensuite, vous pouvez modifier votre paramètre d' Expression<Func<T, IRecord>>[] en Expression<Func<T, IRecord>>[] .

La partie délicate serait de construire de nouvelles expressions include , basées sur celles que vous avez données, en ajoutant un && r.RecordStatus == "whatever" sur chacune d’elles. Le code pour faire quelque chose comme ça peut être un peu moche, mais cela devrait être possible.





Sous licence: CC-BY-SA
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi