0

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

列名、ページ サイズ、pageNumber、および N が引数として渡されます

4

3 に答える 3

3

これを試して:

var query = dataTable.AsEnumerable()
        .OrderBy(c => c.columnName)
        .Select(r => new {...})
        .Skip(10)
        .Take(5)
于 2013-01-15T07:32:20.403 に答える
1

これを試して、

int numberOfObjectsPerPage = 20;
var queryResultPage = dataTable.OrderBy(c => c.columnName).Select(r => r).Skip(numberOfObjectsPerPage * pageNumber).Take(numberOfObjectsPerPage);
于 2013-01-15T07:33:34.323 に答える
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");
于 2013-01-15T07:34:26.703 に答える