フォームにオプションのチェックボックスを備えた説明フィールドがあるとします。チェックボックスは、ルックアップを実行するときに検索するフィールドを表します。現在、where句の一意のバージョンを呼び出すルックアップのマトリックスがあります。動作しますが、少し臭いがします。
これが抜粋です
// Look for part numbers decide how many fields to search and use that one.
// 0 0 X
if (!PartOpt[0] && !PartOpt[1] && PartOpt[2])
{
query = query.Where(p => (p.PartNumAlt2.Contains(partSearchRec.inventory.PartNum)));
}
// 0 X 0
if (!PartOpt[0] && PartOpt[1] && !PartOpt[2])
{
query = query.Where(p => (p.PartNumAlt.Contains(partSearchRec.inventory.PartNum)));
}
// 0 X X
if (!PartOpt[0] && PartOpt[1] && PartOpt[2])
{
query = query.Where(p => (p.PartNumAlt.Contains(partSearchRec.inventory.PartNum)
|| p.PartNumAlt2.Contains(partSearchRec.inventory.PartNum)));
}
// X 0 0
if (PartOpt[0] && !PartOpt[1] && !PartOpt[2])
{
query = query.Where(p => (p.PartNum.Contains(partSearchRec.inventory.PartNum)));
}
. . .
これはしばらく続き、コーディングエラーが発生しやすいようです。いずれの場合も、選択したフィールドのいずれかで同じ情報を探しています。SQLでこれを行っている場合は、必要に応じてWHERE句を作成するだけで済みます。