これらのタスクはすべて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());
私が便利だと思った方法の1つは、クエリを次のようなものに分割することです。
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);
}
とにかく、同様の解決策を探している人は誰でもこれらすべてが有効な答えですが、最終的に私は提供された解決策に似たものを使うことになりました。