我有一个返回自定义对象的LINQ查询。该对象派生自Dictionary<T>
个结果对象,每个结果对象都有一个URL。我的LINQ对象根据T中的URL属性对Dictionary<T>
进行分组,然后从URL组中获取object.First()
项。
现在我的LINQ对象都有唯一的网址,并且还计算了原始Dictionary<T>.
好的,此时我在LINQ对象上执行DataBind到ASP页面。 DataBind是<asp:Repeater>
的{{1}}。
我想要的是获取ItemTemplate
的迭代器,就像它是一个简单的<asp:Repeater>
类型循环一样。这样我就可以动态显示结果的数量(比如说有五个结果的列表,每个结果都有1.结果.... 2.结果...... 3.结果......
我不知道有多少结果可以开始(可能没有)。
如何实现这一目标?我可以使用lambda表达式来改变结果对象,并在我的Linq列表中保存一个整数吗?
我希望这不会太混乱!请询问您是否需要更好的解释。非常感谢,一如既往。
答案 0 :(得分:2)
如果你想在Repeater
中显示行号,它实际上比我想象的容易得多。您不需要知道当前索引,因为每次绑定发生时您都可以计算/递增一个值并显示它。
首先在.cs代码中创建一个整数。例如:
public partial class _YourPageName : System.Web.UI.Page
{
private int _itemCounter = 0;
然后在Repeater
ItemTemplate
中,您只需使用Literal
或其他内容显示它。
<asp:Literal ID="litCount" runat="server" OnDataBinding="litCount_DataBinding" />
然后为DataBinding
或您想要使用的任何内容实施Literal
事件:
protected void litCount_DataBinding(object sender, System.EventArgs e)
{
_itemCounter++;
Literal lt = (Literal)(sender);
lt.Text = _itemCounter.ToString();
}
每次绑定ItemTemplate
时,它都会递增计数器并显示它。
也许我过度简化了你的问题。
答案 1 :(得分:1)
:
Dictionary
var items = originalItems.Select((Value, Index) => new { Value, Index });
的重载为迭代器中的每个条目提供索引 - 我刚刚以匿名类型捕获了结果。 (如果您使用的是.NET 4,则可能需要使用Select
;这取决于结果的使用位置。)
这将从Index = 0开始 - 当然从1开始你需要:
Tuple<,>
(重命名参数使其保持在Stack Overflow的一条短线上。)