2009-06-25 3 views

Répondre

3

Il étend IEnumerable, IQueryable et IEnumerable<T>. Il peut ne pas avoir de méthodes propres, mais il agrège ces trois autres interfaces en une seule, de sorte que vous n'avez pas à les traiter séparément.

5

IQueryable<T> est nécessaire car il définit un contrat requis pour un fournisseur LINQ. La plupart des méthodes d'extension disponibles sur IQueryable<T> sont conçues pour accepter des expressions plutôt que des délégués.

Ceci est important car un fournisseur LINQ aura besoin d'analyser l'arbre d'expression plutôt que d'appeler un délégué.

12

IQueryable<T> s'étend également IQueryable. Fondamentalement, c'est un IQueryable qui peut être énuméré d'une manière fortement typée. (Les deux IQueryable et IEnumerable<T> déjà étendu IEnumerable, il est donc de ne pas ajouter quoi que ce soit sur ce front.)

Maintenant, ayant un IQueryable fortement typé permet LINQ to SQL (etc) pour être fortement typé - sinon vous pourriez ne pas écrire Where clauses etc sans casting. Les méthodes LINQ impliquées sont dans le type Queryable, reflétant en grande partie les méthodes Enumerable mais prenant arbres d'expression au lieu des délégués. (Si vous n'avez jamais utilisé d'arborescence d'expression auparavant, ce sont essentiellement des structures de données décrivant le code - alors qu'un délégué est le code lui-même, donc vous pouvez exécuter un délégué, mais vous pouvez examiner un arbre d'expression faire.)

+0

il a été 7 ans, mais depuis l'offre par l'auteur estimable a été fait, je vais le prendre jusqu'à:. est une preuve factice explication d ation d'arbres d'expression possible? peut-être pour le bénéfice des futurs lecteurs plus que moi, coz Google est attirant :) – BKSpurgeon

+1

@BKSpurgeon: Je vais ajouter un peu, mais ce n'est pas vraiment le point de la question, donc je pense que vous seriez mieux avec un tutoriel pour être honnête. –

0

Utilisez IQueryable si vous souhaitez traduire une requête linq vers une arborescence d'expression (System.Linq). D'un arbre d'expression, vous pouvez facilement traduire votre requête LINQ à une autre langue (SQL pour LINQ to SQL Un autre exemple classique est Linq Google où vous voulez que cette requête.

var searchResult = from result 
        in Google.Repository 
        where result.Equals("i love linq") 
        select result; 

Pour traduire cette url:

http://www.google.com/search?hl=en&q=i+love+linq&aq=f&oq=&aqi=g10

Ensuite, vous analysez la page pour obtenir les résultats

Questions connexes