2

这是一个简化的选择列表

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

根据选择列表中的值,我希望从我的表中找到相关值。

LINQ

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

第二种解决方案 (==) 将适用于除All之外的所有情况,如果我想将其用于多选列表,则会中断。

第三种解决方案将正确处理All ,但如果选择了Test,它仍将返回Test1Test2

如何修改此代码以使用All、多选和仅选择精确值?

4

1 回答 1

4

无论哪种方式,您都需要添加一个特殊情况来覆盖"All",因为它是特殊的。例如,您可以像这样重写您的第二个解决方案:

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