如何将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(?)'

如何将IDictionary对象的IList绑定到数据源的集合

字典基本上是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);

不过,图片确实让这篇文章很棒。你真的可以看到发生了什么。