我找到了一个处理LINQ排序和分页的扩展方法.虽然这很好用,但我试图看看是否有其他方法可以使用它.
目前,扩展方法的代码如下:
public static IQueryablePage ( this IQueryable obj, int page, int pageSize, System.Linq.Expressions.Expression > keySelector, bool asc, out int rowsCount) { rowsCount = obj.Count(); int innerRows = (page - 1) * pageSize; if (asc) return obj.OrderBy(keySelector).Skip(innerRows).Take(pageSize).AsQueryable(); else return obj.OrderByDescending(keySelector).Skip(innerRows).Take(pageSize).AsQueryable(); }
该方法接受一个基于类型的表达式.
在我的经销商类中,我有一个方法GetDealers,它基本上调用它,即
db.User.Page(1, 2, p => p.User.UserProperty.Name, true, out rowCount)
从事物的呈现方面来看,我不知道或可以访问上述表达,例如
ListView1.DataSource = users.GetDealers("SortColumn", pageNo, pageSize, out rowCount, bool asc); ListView1.DataBind();
唯一的方法是在我的GetDealers方法中有一个switch语句,然后转换为表达式.有没有办法绕过这个,或者这个方法好吗?
我不确定你在问什么,但我相信这是我对自己的看法.如果您想知道如何根据字符串动态排序结果,而不是正确的LINQ表达式,那么您很幸运.
Scott Guthrie发表了一篇关于这个主题的精彩文章.它引用了一个Microsoft文件,它扩展了任何IQueryable
对象以支持动态排序.
C#动态查询库(包含在\ LinqSamples\DynamicQuery目录中).只需将页面添加到您的App_Code
文件夹并在项目中包含"Using System.Linq.Dynamic",您就可以使用以下语法:
myUsers = myUsers.OrderBy("LastName");
我希望这有帮助!