2017-10-10 14 views
0

VS 2017またはRoslynコンパイラの拡張機能を作成する方法はありますか、何でも、このLinQクエリをもっと美しくするには?Visual Studio/C#コンパイラ拡張:LinQ "XまたはY"

var query = from s in db.TimeSlicedPosts 
      where s.Post == post || s.Post == null 
      where s.Date == day 
      where s.Hour == hour 
      select s; 

私はそれは次のようになりたいと思います:

var query = from s in db.TimeSlicedPosts 
      where either s.Post == post or s.Post == null 
      where s.Date == day 
      where s.Hour == hour 
      select s; 

2つの以上のwhere節が条件を作成するので、私はを作成するために、英語の形成方法を持ってしたいと思いますORの条件もあります。この場合、either X or Y [or Z, ...]です。

このようにして、後者の例が完全に有効なC#コードと見なされ、Roslynを書き直したり再コンパイルしたりすることなく、何らかの拡張機能を書くことができますか?

「はい」の場合、digginをどこから開始する必要がありますか?

+6

いいえ、Roslynのは、あなたがC#のの文法を変更するプラグインを追加することはできません。あなたはRoslynにあなた自身の方言を作ってもらうことができましたが、私は強く**それに対して反対しています。他のものとは別に、ほとんどすべてのプロフェッショナルなC#開発者は、最初のコードを読み書きすることができます。 2番目のコードを使いたい人には、自分のカスタム方言を説明する必要があります。 –

+2

どこの(p => p.post).Or(...)のように見えるように、流暢な拡張メソッドセットを作成することができます。(...) ' – DiskJunky

+2

拡張メソッドの構文に切り替えて、 'var query = db.TimeSlicedPosts.Where(x => SomeCustomMethod(x));'これはもっとクリーンですが(これは意見に基づいています)、それでも他の誰にも分かりません維持する。 – maccettura

答えて

-1

いいえ、Roslynはプラグインを追加して、 C#の文法を変更することはできません。あなたは自分自身の方言を作成するためにロザリンをフォークすることができましたが、私は強くそれに対して助言する です。他のものとは別に、ほとんどすべてのプロフェッショナル C#開発者は最初のコードを読み書きできます。 あなたの2番目のコード を使用したいすべての人にあなた自身のカスタム方言を説明する必要があります。

からJon Skeet

+0

私はあなたの答えとして誰か他の人のコメントを使うべきではないと思う... – NetMage

+0

@NetMageまあ、私はゼロで私の容認できないレートを受け入れる答えが必要です。 1つを書くと私は自分自身を削除します。 – AgentFire

関連する問題