弄这个问题弄了5、6个小时了。
我是Linq菜鸟,今天程序中要用,所以很急。
是这样的。
我目前是创建的dbml文件 然后再使用Dynamic进行操作(主要是实现一个分页功能)
代码如下:
DataClassesDataContext _context = new DataClassesDataContext();
return _context.WSB_AbroadGroupApplyMain.OrderBy(sort + " " + dir).Skip(offset).Take(page_size).ToList();
这个代码运行良好!
但是这个是试用的dbml文件,有很多局限性,(比如我要对几个表联合检索出的数据进行分页操作)
所以就想能不能 linq的Dynamic也能对datatable进行操作。
但是尝试了NNNN久都没搞定,无奈只有这里求救!
我的代码是这样写的:
DataTable dt=wcbBLL.Query("SELECT * FROM WSB_AbroadGroupApplyMain").Tables[0];
var ret = dt.AsEnumerable().OrderBy(sort + " " + dir).Skip(offset).Take(page_size).ToList();
return ret;
但是提示orderby有错误:
错误 3 “System.Data.EnumerableRowCollection<System.Data.DataRow>”不包含“OrderBy”的定义,并且最佳扩展方法重载“System.Linq.Dynamic.DynamicQueryable.OrderBy(System.Linq.IQueryable, string, params object[])”的某些参数无效
Dynamic中orderby扩展的方法如下:
public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)
{
return (IQueryable<T>)OrderBy((IQueryable)source, ordering, values);
}
public static IQueryable OrderBy(this IQueryable source, string ordering, params object[] values)
{
if (source == null) throw new ArgumentNullException("source");
if (ordering == null) throw new ArgumentNullException("ordering");
ParameterExpression[] parameters = new ParameterExpression[] {
Expression.Parameter(source.ElementType, "") };
ExpressionParser parser = new ExpressionParser(parameters, ordering, values);
IEnumerable<DynamicOrdering> orderings = parser.ParseOrdering();
Expression queryExpr = source.Expression;
string methodAsc = "OrderBy";
string methodDesc = "OrderByDescending";
foreach (DynamicOrdering o in orderings)
{
queryExpr = Expression.Call(
typeof(Queryable), o.Ascending ? methodAsc : methodDesc,
new Type[] { source.ElementType, o.Selector.Type },
queryExpr, Expression.Quote(Expression.Lambda(o.Selector, parameters)));
methodAsc = "ThenBy";
methodDesc = "ThenByDescending";
}
return source.Provider.CreateQuery(queryExpr);
}
希望各位Linq、DoNet的达人帮忙了。 啊早上大概10点钟起了。希望看到好的解决方案。善哉善哉~
4 个解决方案
#1
不是吧,自己顶一个!!!
#2
自己再顶!!!
#3
顶顶!更健康~
#4
DataTable dt=wcbBLL.Query("SELECT * FROM WSB_AbroadGroupApplyMain").Tables[0];
var ret = dt.AsEnumerable().OrderBy(sort + " " + dir).Skip(offset).Take(page_size).ToList();
return ret;
这里的orderby是按照这个表的某一列来进行排序
var ret = dt.AsEnumerable().OrderBy(n=>n.Field<string(这里不用string也可以换成别的)>("列名")).Skip(offset).Take(page_size).ToList();
var ret = dt.AsEnumerable().OrderBy(sort + " " + dir).Skip(offset).Take(page_size).ToList();
return ret;
这里的orderby是按照这个表的某一列来进行排序
var ret = dt.AsEnumerable().OrderBy(n=>n.Field<string(这里不用string也可以换成别的)>("列名")).Skip(offset).Take(page_size).ToList();
#1
不是吧,自己顶一个!!!
#2
自己再顶!!!
#3
顶顶!更健康~
#4
DataTable dt=wcbBLL.Query("SELECT * FROM WSB_AbroadGroupApplyMain").Tables[0];
var ret = dt.AsEnumerable().OrderBy(sort + " " + dir).Skip(offset).Take(page_size).ToList();
return ret;
这里的orderby是按照这个表的某一列来进行排序
var ret = dt.AsEnumerable().OrderBy(n=>n.Field<string(这里不用string也可以换成别的)>("列名")).Skip(offset).Take(page_size).ToList();
var ret = dt.AsEnumerable().OrderBy(sort + " " + dir).Skip(offset).Take(page_size).ToList();
return ret;
这里的orderby是按照这个表的某一列来进行排序
var ret = dt.AsEnumerable().OrderBy(n=>n.Field<string(这里不用string也可以换成别的)>("列名")).Skip(offset).Take(page_size).ToList();