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
。非常感谢你!这么明显的解决办法!我甚至不能把我的疏忽归咎于星期一!该死的那些星期二。