2017-10-10 68 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; 

由於兩個或兩個以上where子句創建條件,我想有一個英語形成的方式來創建一個OR條件,在這種情況下,either X or Y [or Z, ...]

是否有可能以這種方式使它成爲可能,以便後面的示例將被視爲完全有效的C#代碼,而無需重新編寫和重新編譯Roslyn,而是通過編寫某種擴展?

如果是,那麼我應該從哪裏開始diggin'?

+6

不,羅斯林不允許添加插件來改變C#語法。你可以把羅斯林分叉來創建你自己的方言,但是我強烈建議**。除此之外,幾乎所有專業的C#開發人員都能夠讀寫第一個代碼。你必須向每個想要使用第二個代碼的人解釋你自己的自定義方言。 –

+2

您可以創建一個流暢的擴展方法集,使其看起來像Where(p => p.post).Or(...)。Where(...)' – DiskJunky

+2

您可以切換到擴展方法語法,並且只需編寫一個返回bool的自定義方法:'var query = db.TimeSlicedPosts.Where(x => SomeCustomMethod(x));'這將會更清晰(然而這是基於意見的),並且仍然不會讓其他人感到困惑保持。 – maccettura

回答

-1

不,Roslyn不允許您添加插件來更改C#的語法 。你可以把羅斯林岔開來創建你自己的方言,但是我強烈建議你不要這樣做。除此之外,幾乎所有的C#開發人員都可以讀寫第一個代碼。你要 必須解釋你自己的自定義方言給所有想要使用 你的第二個代碼的人。

- Jon Skeet

+0

我不認爲你應該使用他人的評論作爲你的答案...... – NetMage

+0

@NetMage好吧,我需要一個答案接受我的未接受率爲零。寫一個,我會刪除我自己的。 – AgentFire