Vous ne pouvez pas modifier la façon dont le compilateur interprète les instructions de requête. Ces règles sont appelées "compréhensions de requêtes" et les règles de traduction sont directement intégrées dans le compilateur C#. Chaque requête est traduite en une séquence appropriée d'appels dans les méthodes d'extensions dans la bibliothèque Linq.
Si vous utilisez des outils tels que Reflector, vous verrez la séquence correspondante d'appels de méthode d'extension dans lesquels ces expressions sont traduites.
Les règles de compréhension des requêtes sont entièrement documentées dans le C# 3.0 specification. Bien que je convienne qu'il existe des cas spécifiques où il pourrait être utile d'étendre la syntaxe de la requête dans le langage, je suppose qu'il nécessite un traitement de compilation sophistiqué pour les convertir en syntaxe d'appel de fonction appropriée. Je ne pense pas que, dans la plupart des cas, il serait facile d'injecter un traitement pour des cas particuliers sans affecter la façon dont l'expression entière est transformée. En attendant, réalisez que vous pouvez utiliser des méthodes de chaînage et d'extensions régulières pour étendre les capacités de Linq.
si je voulais faire un type spécial de rejoindre? ou essayez d'imiter différentes fonctionnalités que sql offre qui pourrait être utile contre IQueryable? –
@Russ: Vous pouvez faire tout cela avec des méthodes d'extension, cela ne se traduira pas par une syntaxe de requête. Par exemple: 'var blah = bloops.YourSpecialJoin (blobs) .Where (bip => bip == razzie);' – LukeH