Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过使用Linq进行排序,从DataTable中选择top N with record_Linq_Linq To Objects - Fatal编程技术网

通过使用Linq进行排序,从DataTable中选择top N with record

通过使用Linq进行排序,从DataTable中选择top N with record,linq,linq-to-objects,Linq,Linq To Objects,我已经创建了一个数据表。在一些操作之后,我填充了DataTable的行 我对Linq非常陌生,我想从DataTable中获取顶部的“N”个记录,并实现一些分页 LetdataTable是包含一些数据的dataTable 我需要这样的东西 var Query = from d in dataTable Order by columnName skip( some records pageSize * pageNumber) Select top N

我已经创建了一个数据表。在一些操作之后,我填充了DataTable的行

我对Linq非常陌生,我想从DataTable中获取顶部的“N”个记录,并实现一些分页

LetdataTable是包含一些数据的dataTable

我需要这样的东西

 var Query = from d in dataTable
        Order by columnName
        skip( some records pageSize * pageNumber)
        Select top N from dataTable
列名、页面大小、页码和N将作为参数传递

var query = dataTable.AsEnumerable()
        .OrderBy(c => c.columnName)
        .Select(r => new {...})
        .Skip(10)
        .Take(5)
试试这个:

var query = dataTable.AsEnumerable()
        .OrderBy(c => c.columnName)
        .Select(r => new {...})
        .Skip(10)
        .Take(5)
试试这个

int numberOfObjectsPerPage = 20;
var queryResultPage = dataTable.OrderBy(c => c.columnName).Select(r => r).Skip(numberOfObjectsPerPage * pageNumber).Take(numberOfObjectsPerPage);
试试这个

int numberOfObjectsPerPage = 20;
var queryResultPage = dataTable.OrderBy(c => c.columnName).Select(r => r).Skip(numberOfObjectsPerPage * pageNumber).Take(numberOfObjectsPerPage);
试试这个

var Query = dataTable.Select(o=>o).OrderBy(o=>o.columnName).Skip(pageSize * pageNumber).Take(N);
编辑

对于pass列名,您应该添加此代码

    public static IQueryable<T> OrderByField<T>(this IQueryable<T> q, string SortField, bool Ascending)
    {
        var param = Expression.Parameter(typeof(T), "p");
        var prop = Expression.Property(param, SortField);
        var exp = Expression.Lambda(prop, param);
        string method = Ascending ? "OrderBy" : "OrderByDescending";
        Type[] types = new Type[] { q.ElementType, exp.Body.Type };
        var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
        return q.Provider.CreateQuery<T>(mce);
    }
试试这个

var Query = dataTable.Select(o=>o).OrderBy(o=>o.columnName).Skip(pageSize * pageNumber).Take(N);
编辑

对于pass列名,您应该添加此代码

    public static IQueryable<T> OrderByField<T>(this IQueryable<T> q, string SortField, bool Ascending)
    {
        var param = Expression.Parameter(typeof(T), "p");
        var prop = Expression.Property(param, SortField);
        var exp = Expression.Lambda(prop, param);
        string method = Ascending ? "OrderBy" : "OrderByDescending";
        Type[] types = new Type[] { q.ElementType, exp.Body.Type };
        var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
        return q.Provider.CreateQuery<T>(mce);
    }

我可以做一些类似(c=>“列名”)的事情吗。因为它需要参数化才能参数化LINQ,所以您需要构建表达式。因为它需要参数化才能参数化LINQ,所以您需要构建表达式。查看此链接,主要问题是列名。我应该如何通过它主要问题是列名。我该怎么通过呢