1

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

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

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

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

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

4

2 回答 2

1

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

Foo foo = ((List<Foo>)(e.Result))[idx];
于 2012-07-17T18:42:34.683 回答
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 对象。

于 2012-07-17T18:41:42.383 回答