Linq使用稍微复杂的选择列表

时间:2013-04-30 21:34:26

标签: c# asp.net-mvc linq

这是一个简化的选择列表

<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 时会中断,因为它还会返回 Test1 Test2

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

第三个解决方案将正确处理 All ,但如果 Test Test ,它仍会返回 Test1 Test2 地选择。

如何修改此代码以使用All,多重选择,并且只选择确切的值?

1 个答案:

答案 0 :(得分:4)

无论如何,您需要添加一个特殊案例来涵盖"All",因为它很特别。例如,您可以像这样重写第二个解决方案:

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