2

これは単純化された選択リストです

<select name="stuff">
    <option value="">All</option>
    <option>Test</option>
    <option>Test1</option>
    <option>Test2</option>
    <option>Horses</option>
</select>

選択リストの値に基づいて、テーブルから関連する値を見つけたいと考えています。

リンク

1. someTable.Where(r => r.someField.Contains(stuff));
2. someTable.Where(r => r.someField == stuff);

3. var a = someTable;
if(stuff != null)
a = a.Where(r => r.someField.Contains(stuff))

「すべて」オプションが選択されている場合、前者のソリューションは適切に機能します。All は空の文字列stuffで表される.Containsため、どのような場合でも true を返します。Testを選択すると、 Test1Test2も返されるため、これは壊れます。

2 番目のソリューション (==) は、 All を除くすべてのケースで正常に機能しこれを複数選択リストに使用する場合は機能しなくなります。

3 番目のソリューションはすべてを適切に処理しますが、 Testが選択されている場合はTest1Test2を返します。

All、複数選択、および正確な値の選択のみで動作するようにこのコードを変更するにはどうすればよいですか?

4

1 に答える 1

4

いずれにせよ、 cover に特別なケースを追加する必要があります"All"。たとえば、2 番目のソリューションを次のように書き直すことができます。

someTable.Where(r => string.Empty == stuff || r.someField == stuff);
于 2013-04-30T21:37:23.150 に答える