我有一堆这些任务都基于 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);
}
无论如何,任何寻找类似解决方案的人都是有效的答案,但最后我最终选择了与提供的解决方案类似的东西。