有沒有辦法爲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'?
不,羅斯林不允許添加插件來改變C#語法。你可以把羅斯林分叉來創建你自己的方言,但是我強烈建議**。除此之外,幾乎所有專業的C#開發人員都能夠讀寫第一個代碼。你必須向每個想要使用第二個代碼的人解釋你自己的自定義方言。 –
您可以創建一個流暢的擴展方法集,使其看起來像Where(p => p.post).Or(...)。Where(...)' – DiskJunky
您可以切換到擴展方法語法,並且只需編寫一個返回bool的自定義方法:'var query = db.TimeSlicedPosts.Where(x => SomeCustomMethod(x));'這將會更清晰(然而這是基於意見的),並且仍然不會讓其他人感到困惑保持。 – maccettura