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ステートメントを入れることはできません。しかし、私はクエリを複製することもできません。ここに示されているように、それらは非常に唖然としています。本番クエリははるかに長いため、1つの句のみで異なる同じ長いクエリの複数のバージョンがあると、非常に不健全で保守しにくいように見えます。
何か案は?