关于c#:Linq使用稍微复杂的选择列表

Linq to work with slightly complex selectlist

这是一个简化的选择列表

1
2
3
4
5
6
7
<select name="stuff">
    <option value="">All</option>
    <option>Test</option>
    <option>Test1</option>
    <option>Test2</option>
    <option>Horses</option>
</select>

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

林克

1
2
3
4
5
6
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))

选择"全部"选项后,前一个解决方案将正常工作。由于所有都由空字符串表示,因此对于任何情况,.Contains都将返回true。这在选择测试时中断,因为它还将返回test1和test2

第二个解决方案(==)对于除"全部"之外的所有情况都可以正常工作,并且如果我想将其用于多个选择列表,它将中断。

第三个解决方案将正确处理所有问题,但如果选择了测试,它仍然会返回test1和test2。

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


不管怎样,您需要添加一个特殊的案例来涵盖"All",因为它非常特别。例如,您可以这样重写第二个解决方案:

1
someTable.Where(r => string.Empty == stuff || r.someField == stuff);