迭代Linqdatasource返回的对象

时间:2012-07-17 18:32:57

标签: c# casting iteration linqdatasource

我有一个GridView,带有过滤和分页(一次10个),绑定到Linqdatasource。这一切都有效。

但是如何在完成对所有行的检索后获取LinqDataSource中检索到的所有数据的ID?

我有这个方法,e.Result是一个包含此网格列表的对象数据类型

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  // event fires after data retrieval complete.
{
    List<int> ids = new List<int>();
    if (e.TotalRowCount > 0)
    {
        for (int idx = 0; idx < e.TotalRowCount; idx++)
        {
            Foo foo = (Foo)(e.Result[idx]);  // error cannot apply indexing to expression of type object
            ids.Add(foo.Id);
        }
    }
}

我的错误是迭代一个对象,怎么办呢?

2 个答案:

答案 0 :(得分:1)

您可以这样做:

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  // event fires after data retrieval complete.
{
    List<int> ids = new List<int>();
    if (e.TotalRowCount > 0)
    {
        List<Foo> fooList = ((IEnumerable)e.Result).ToList();
        for (int idx = 0; idx < fooList.Count; idx++)
        {
            Foo foo = fooList[idx];
            ids.Add(foo.Id);
        }
    }
}

或者

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  // event fires after data retrieval complete.
{
    List<int> ids = new List<int>();
    if (e.TotalRowCount > 0)
    {
        foreach(Foo foo in (IEnumerable)e.Result)
        {
            ids.Add(foo.Id);
        }
    }
}

如果您的Selected是筛选视图的结果,e.Result将是匿名类型的IEnumerable,因此获取信息很可能需要使用IQueryable和viewmodel对象。

答案 1 :(得分:1)

e.Resultobject,因此您需要将其转换为List类型才能应用索引:

Foo foo = ((List<Foo>)(e.Result))[idx];