如何将Dictionary对象列表绑定到数据源的集合?

时间:2014-04-30 12:21:20

标签: c# list generics dictionary datasource

我有以下声明:

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>

提前感谢。

更新*************

抱歉,我确实有数据绑定,但是当我尝试订购列表时出现编译错误:

  

'OrderByDescending(?)'

的未知方法'System.Collections.Generic.IList<System.Collections.Generic.IDictionary<System.DateTime, string>>'

1 个答案:

答案 0 :(得分:2)

字典基本上是KeyValuePair的列表。您正在尝试绑定到遍历每个KeyValuePair的枚举,而不是每个字典。您需要将List of Dictionary(KeyValuePair列表列表)展平为单个List。我使用SelectMany扩展方法。类似的东西:

actions.SelectMany(dict => dict.ToList()).OrderByDescending(a => a.Key);

A Visual Look At the LINQ SelectMany operator有一个很好的视觉示例。在该示例中,我们有一组客户,其中包含订单集合,每个订单包含一个项目列表。他用

之类的东西迭代所有项目
 var flatListOfItems = personList.SelectMany(p => p.Orders).SelectMany(o => o.Items);

然而,图形真的让这篇文章很棒。你真的可以看到发生了什么。