C# Linq使用稍微复杂的selectlist

C# Linq使用稍微复杂的selectlist,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,下面是一个简化的选择列表 <select name="stuff"> <option value="">All</option> <option>Test</option> <option>Test1</option> <option>Test2</option> <option>Horses</option> </se

下面是一个简化的选择列表

<select name="stuff">
    <option value="">All</option>
    <option>Test</option>
    <option>Test1</option>
    <option>Test2</option>
    <option>Horses</option>
</select>
选择“全部”选项后,前一种解决方案将正常工作。由于所有内容都由空字符串stuff表示,
.Contains
在任何情况下都将返回true。选择Test时会中断,因为它还将返回Test1和Test2

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

第三个解决方案将正确处理所有问题,但如果选择Test,它仍将返回Test1和Test2


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

无论如何,您需要添加一个特例来涵盖
“所有”
,因为它是特殊的。例如,您可以这样重写第二个解决方案:

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

无论如何,您都需要添加一个特殊的案例来涵盖
“所有”
,因为它是非常特殊的。例如,您可以这样重写第二个解决方案:

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

为什么不为第三个解决方案执行
r.someField==stuff
?如果
.Contains给出了不正确的行为,那么您为什么要首先使用
.Contains
,这让人感到困惑。@mellamokb在第三种解决方案中使用
==
仅在没有多选的情况下才有效。在第二个解决方案的结尾,我讲述了multi-select将如何打破这种局面。我应该把它说得更清楚一点第三个解决方案为什么不做
r.someField==stuff
?如果
.Contains给出了不正确的行为,那么您为什么要首先使用
.Contains
,这让人感到困惑。@mellamokb在第三种解决方案中使用
==
仅在没有多选的情况下才有效。在第二个解决方案的结尾,我讲述了multi-select将如何打破这种局面。我应该多做一点explicit@mellamokb啊,你说得对,我错过了
All
是显示名称,而它的值是
string.Empty
。非常感谢你!这么明显的解决办法!我甚至不能把我的疏忽归咎于星期一!该死的那些星期二。@mellamokb啊,你说得对,我错过了
All
是显示名称,而它的值是
string.Empty
。非常感谢你!这么明显的解决办法!我甚至不能把我的疏忽归咎于星期一!该死的那些星期二。