0

我希望有人使用了Troy Goode 非常出色的 PagedList吗?我实际上在 Winforms 应用程序中使用它,虽然它确实有效,但我失去了对其进行排序的能力。

返回 PagedList、控制 Page 和 Size 以及绑定到 DataGridView 都没有问题,但我最关心的是排序。现在我也遇到了Muhammad Mosa 的 SortedPageList,但我真的对参数要求之一感到困惑。我正在使用私有方法返回 SortedPageList,但下面的代码似乎不起作用:

private SortedPagedList<Location, Location> GetInactiveLocationData(int Index, int Size) {
    sysDataContext ctx = new sysDataContext();
    try {
        var query = ctx.Location.Where(x => x.Active == false).AsQueryable();
        return query.ToPagedList(Index, Size, i => i, false);          
        //return new SortedPagedList<Location, Location>(query, Index, Size, i => i , true);
    }
    catch (Exception) {
        throw;
    }
}

这会引发错误“ Cannot order by type: Location”。显然,我想处理用户单击列标题以对该列进行排序的情况。

我知道该解决方案涉及的 Lambda 表达式超出了我所拥有的知识水平(虽然承认很尴尬),但我在这方面完全一无所知!我真的很重视您对上述内容的建议!

感谢你!

4

2 回答 2

0

好吧,您可以从学习一些基本的 LINQ 操作开始(向下滚动到“排序”部分。或者在这里:LINQ 第 1 部分 - 过滤和排序对象列表

一旦你发现了魔法,你就会飞起来:P

于 2009-11-28T09:59:59.757 回答
0

好吧,我觉得自己像个白痴!...嗯,有点!我得到了以下工作:

using (sysContext ctx = new sysDataContext()) {
    try {
        var data = ctx.Location.Where(x => x.Active == false).AsQueryable();
        var query = data.ToPagedList(PageIndex, PageSize, o => o.DueDate, true);
        dgv.DataSource = query;
    }
    catch (Exception) {
        throw;
    }
}

现在,排序表达式在这里被描述为o => o.DueDate。这很棒,虽然这确实有效,但我现在正试图找到一种方法来创建一个通用函数,该函数将允许我:

  1. 检测单击了哪个列标题(可能使用 switch 语句)
  2. 将其类型转换为适当的 Linq 实体属性
  3. 将该属性传递给泛型方法

一种类似于以下内容的方法:

private void RefreshData([type] SortExpression, bool Ascending, int PageIndex, int PageSize) {
    using (sysDataContext ctx = new sysDataContext()) {
        try {
            var data = ctx.Location.AsQueryable();
            var query = data.ToPagedList(PageIndex, PageSize, o => o.[SortExpression], Ascending);
            dgv.DataSource = query;
        }
        catch (Exception) {
            throw;
        }
    }
}

这可能吗?

另外一件事(如果它可以帮助你) SortedPageList 方法如下所示:

public static SortedPagedList<T, TResult> ToPagedList<T, TResult>(this IQueryable<T> source, int index, int pageSize, System.Linq.Expressions.Expression<Func<T, TResult>> keySelector, bool asc) {
    return new SortedPagedList<T, TResult>(source, index, pageSize, keySelector, asc);
}

如何表达System.Linq.Expressions.Expression<Func<T, TResult>>为可以作为参数传递的类型?

于 2009-11-28T12:18:36.767 回答