遍历通过使用LinqDataSource返回的对象(Iterating over objects r

2019-10-17 01:27发布

我有一个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);
        }
    }
}

我的错误是遍历一个对象,这可怎么办呢?

Answer 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);
        }
    }
}

如果您选择的是筛选视图的结果,e.Result将是一个IEnumerable匿名类型的,所以获得的信息将最有可能需要使用一个IQueryable和视图模型对象。



Answer 2:

e.Result是一个object ,所以你需要将其转换为一个列表类型,能够应用索引:

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


文章来源: Iterating over objects returned by Linqdatasource