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"选项时,前一种解决方案将正常工作。由于All由空字符串stuff表示,因此.Contains在任何情况下都将返回true。当选择Test时,这种情况就会中断,因为它还将返回Test1Test2

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

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

我如何修改这段代码与All,多重选择,只选择准确的值工作?

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

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

最新更新