选择带有来自DataTable的记录的前N个,并使用Linq进行一些排序

时间:2013-01-15 07:28:53

标签: linq linq-to-objects

我创建了一个DataTable。我在一些操作之后填充了DataTable的行。

我是Linq的新手我希望从DataTable获得顶级“N”记录,同时实现一些分页。

dataTable 是包含一些数据的DataTable。

我需要这样的东西

 var Query = from d in dataTable
        Order by columnName
        skip( some records pageSize * pageNumber)
        Select top N from dataTable

列Name,Page size,pageNumber和N将作为参数传递

3 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:1)

试试这个,

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

答案 2 :(得分:1)

试试这个

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

修改

对于传递列名称,您应该添加此代码

    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 values = dataTable.OrderByField("columnName");