如何将IDictionary对象的IList绑定到数据源的集合
本文关键字:绑定 数据源 集合 IList IDictionary 对象 | 更新日期: 2023-09-27 18:00:51
我有以下声明:
IList<IDictionary<DateTime, string>> actions = new List<IDictionary<DateTime, string>>();
IDictionary<DateTime, string> d;
然后我多次添加到操作中,例如:
d = new Dictionary<DateTime, string>();
d.Add(DateTime.Now, "Must select at least one Policy to assign.");
actions.Add(d);
最后,我希望能够将这个List of Dictionary对象分配给一个数据源。类似于:
rptActions.DataSource = actions.OrderByDescending(a => a.Key);
相应的asp代码如下:
<asp:Repeater ID="rptActions" runat="server">
<ItemTemplate>
<li>
<%#Eval("Value") %>
</li>
</ItemTemplate>
</asp:Repeater>
提前谢谢。
更新*************
对不起,我确实有数据绑定,但当我尝试订购列表时,我遇到了一个编译错误:
'System.Collections.Generic.IList<System.Collections.Generic.IDictionary<System.DateTime, string>>'
的未知方法'OrderByDescending(?)'
字典基本上是KeyValuePair的列表。您正试图绑定到一个枚举对象,该枚举对象迭代每个KeyValuePair,而不是每个字典。您需要将List of Dictionary(List of List of KeyValuePair(展开为单个List。我会使用SelectMany扩展方法。类似于:
actions.SelectMany(dict => dict.ToList()).OrderByDescending(a => a.Key);
在LINQ SelectMany运算符的a visual Look中有一个很好的可视化示例。在本例中,我们有一个客户集合,其中有一个订单集合,每个订单都包含一个项目列表。他用之类的东西迭代所有的项目
var flatListOfItems = personList.SelectMany(p => p.Orders).SelectMany(o => o.Items);
不过,图片确实让这篇文章很棒。你真的可以看到发生了什么。