我有以下声明:
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>>'
答案 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);
然而,图形真的让这篇文章很棒。你真的可以看到发生了什么。