est-il possible d'ajouter une méthode d'extension à IQueryable<T>
puis, pour mes Linq2Sql ou EF ou NHibernate ou LinqToObjects, définir sa fonctionnalité/comment chaque référentiel va implémenter cette méthode/traduire cette méthode à quelques sql?Puis-je faire cela avec un IQueryable <T>?
Par exemple, imaginez que je veux ce qui suit: -
var result = (from q in db.Categories()
where q.IWishIKnewHowToCode("hi")
select q).ToList();
maintenant, le code de la méthode d'extension IWishIKnewHowToCode()
sera différent quand il est L2S, par rapport à EF ou LinqToObjects, etc.
I » Je ne parle pas de tuyaux et de filtres, ici. Que je sais comment faire ça. Imaginez donc que si c'était L2S, cette méthode ferait une clause linq Where
mais si le référentiel était ... disons ... LinqToObjects, il ferait Take(10)
.
Est-ce possible?
(Je ne suis pas sûr de ce qu'il est officiellement appelé ... ce que je suis désireux de le faire)
Je ne sais pas pourquoi vous voulez créer une extension pour IQueryable. Dans votre exemple, il semble que vous souhaitiez créer une méthode d'extension pour le type T. Et vous pouvez créer une surcharge pour chaque type T. Ai-je raté quelque chose? –
DSO
Oui, il te manque quelque chose ici. Le type est une classe POCO. Il ne sait rien d'une persistance/référentiels. IQueriable peut connaître la persistance/les référentiels dans chaque projet/couche du référentiel. En tant que tel, j'espère générer une expression Queryable .. et chaque projet de persistance devra expliquer comment implémenter cette méthode d'extension (mot-clé), par rapport à son référentiel dépendant. Par exemple. Si le mot-clé est 'IWishIKnewHowToCode' ... alors pour un dépôt L2S contre le serveur sql, il s'agira d'une clause where. –