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をどこから開始する必要がありますか?
いいえ、Roslynのは、あなたがC#のの文法を変更するプラグインを追加することはできません。あなたはRoslynにあなた自身の方言を作ってもらうことができましたが、私は強く**それに対して反対しています。他のものとは別に、ほとんどすべてのプロフェッショナルなC#開発者は、最初のコードを読み書きすることができます。 2番目のコードを使いたい人には、自分のカスタム方言を説明する必要があります。 –
どこの(p => p.post).Or(...)のように見えるように、流暢な拡張メソッドセットを作成することができます。(...) ' – DiskJunky
拡張メソッドの構文に切り替えて、 'var query = db.TimeSlicedPosts.Where(x => SomeCustomMethod(x));'これはもっとクリーンですが(これは意見に基づいています)、それでも他の誰にも分かりません維持する。 – maccettura