我有一个带有复选框的下拉列表。假设我在下拉列表中显示以下数据:
<select multiple="multiple" name="Products" id="Products">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
<option value="4">D</option>
</select>
然后我检查了记录no 4,2,3并提交页面。在控制器中,我将int[] arrIDs
更改为List<int> listIDs
以从数据库中收集产品。
List<Product> products = db.Product
.Where(d => listIDs.Contains(d.ProductID))
.ToList();
但我已经按照以下序列2,3,4对products
进行了排序。我想根据我在第4页,第2页,第3页中选择的记录保留序列。怎么解决?
答案 0 :(得分:3)
您可以使用List.IndexOf
获取订单的索引:
List<Product> products = db.Product
.Where(d => listIDs.Contains(d.ProductID))
.AsEnumerable()
.OrderBy(d => listIDs.IndexOf(d.ProductID))
.ToList();
答案 1 :(得分:1)
多重选择框不会保留点击次序。
您需要使用Javascript来观看点击次数,并将订单记录到隐藏字段中,该字段将随表单一起提交。或者放弃多选框,并使用this one之类的组件。 (那不是.NET组件,但我怀疑存在类似的组件。)
答案 2 :(得分:0)
您需要执行GroupJoin
:
List<Product> products = listIDs
.GroupJoin(
db.Product,
x => x,
y => y.ProductID,
(x, ys) => ys.First())
.ToList();
这相当于“左外连接”,它以原始顺序维护listIDs
的值,然后将每个listID
与表格中的相应产品相匹配。
注意:此代码假定数据库中始终存在单个匹配ProductID
。