我有一堆這些任務都基於LINQ查詢。我正在尋找好的方法重構他們,使他們更容易閱讀,並讓我改變了查詢依賴於語言/區域等分割長linq查詢以提高可維護性
var mailTaskOne = CreateTask(() => myService.Mail.Where(p => p.ProjectName == "Delta"
&& (p.MailLang== (int)MailLanguage.EU || p.MailLang == (int)MailLanguage.RU)
&& (p.DateEntered >= startDate && p.DateEntered <= endDate)
&& p.MailPriority == (int)MailPriority.High).Count());
一個我覺得很方便。將分裂的方式查詢到這樣的東西。
var results = myService.Mail.Where(x => x.ProjectName == "Delta");
results = results.Where(p => p.MailLang== (int)MailLanguage.EU);
results = results.Where(p => p.DateModified >= startDate && p.DateModified <= endDate);
這將允許我這樣做,而無需重複每個區域的整個查詢。
if (MailLanguage == "English")
results = results.Where(p => p.MailLang== (int)MailLanguage.EU);
else
results = results.Where(p => p.MailLang== (int)MailLanguage.RU);
有沒有人知道更好的解決方案呢?根據需求,我最終可能需要做20個這樣的查詢,如地區,項目名稱等
編輯:
由於一些限制,我不知道與後端(Web服務/ API)我也很遺憾不能使用一些在這個問題中提到的真棒答案。
例如,這不會得到正確的翻譯,但在任何情況下,因爲答案不正確,根本不適用於我正在對付的API - 可能是因爲它實施得不好。
public bool IsValid(Type x)
{
return (x.a == b) && (x.c ==d) && (x.d == e);
}
無論如何,任何人尋找類似的解決方案所有這些都是有效的答案,但在最後,我結束了與類似提供的解決方案snurre一些事情。
爲什麼你不使用語言作爲參數/變量? –
隨時可以進一步解釋 - 我的頭腦目前處於空白狀態。請記住,可能有多種語言,例如英語可能是US + EU。 :] – eandersson
您是在查詢數據庫還是內存? –