【发布时间】:2013-05-01 05:37:23
【问题描述】:
这是一个简化的选择列表
<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 为已选中。
如何修改此代码以使用 All、多选和仅选择精确值?
【问题讨论】:
-
第三个解决方案为什么不使用
r.someField == stuff?如果.Contains给出不正确的行为,你为什么还要使用它,这令人困惑。 -
@mellamokb 在第三个解决方案中使用
==仅在没有多选的情况下才有效。我结束了第二个解决方案,并介绍了多选将如何中断。我应该让它更明确一点
标签: c# asp.net-mvc linq