我正在创建一个查询来使用 EF 搜索数据库。TdsDb 是 EF 上下文。
string searchValue = "Widget";
TdsDb tdsDb = new TdsDb();
IQueryable<Counterparty> counterparties;
我可以做完全匹配:
counterparties = tdsDb.Counterparties.Where(x => x.CounterpartyName == searchValue);
或通配符匹配:
counterparties = tdsDb.Counterparties.Where(x => x.CounterpartyName.Contains(searchValue));
但我希望能够做到这两点,即(伪代码)
counterparties = tdsDb.Counterparties.Where(x =>
if (searchValue.EndsWith("%"))
{
if (searchValue.StartsWith("%"))
{x.CounterpartyName.Contains(searchValue)}
else
{x.CounterpartyName.StartsWith(searchValue)}
}
else
{x => x.CounterpartyName == searchValue}
);
现在很明显,我不能像这样在 where 子句中添加 if 语句。但我也无法复制查询:这里显示的查询非常愚蠢。生产查询要长得多,因此只有一个子句不同的同一长查询的多个版本似乎非常不健康且不可维护。
有任何想法吗?