如何在列表中保持数据的顺序
本文关键字:数据 顺序 列表 | 更新日期: 2023-09-27 18:31:22
我有一个带有复选框的下拉列表。假设我在下拉列表中显示了以下数据:
<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>
然后我检查了记录 4、2、3 并提交了页面。在控制器中,我将int[] arrIDs
更改为List<int> listIDs
,以从数据库中收集产品。
List<Product> products = db.Product
.Where(d => listIDs.Contains(d.ProductID))
.ToList();
但是我得到了products
按以下顺序 2、3、4 排序。我想根据我在第 4、2、3 页中选择的记录保留序列。如何解决?
您可以使用List.IndexOf
来获取订单的索引:
List<Product> products = db.Product
.Where(d => listIDs.Contains(d.ProductID))
.AsEnumerable()
.OrderBy(d => listIDs.IndexOf(d.ProductID))
.ToList();
多选框不保留单击顺序。
您需要使用 Javascript 来观察点击,并将订单记录到一个隐藏字段中,该字段将与表单一起提交。 或者放弃多选框,使用像这样的组件。 (这不是 .NET 组件,但我怀疑存在类似的组件。
你需要
做一个GroupJoin
:
List<Product> products = listIDs
.GroupJoin(
db.Product,
x => x,
y => y.ProductID,
(x, ys) => ys.First())
.ToList();
这执行等效于"左外连接",它以原始顺序维护listIDs
的值,然后将每个listID
与表中的相应产品进行匹配。
注意:此代码假定数据库中始终存在一个匹配的ProductID
。