Linq之动态排序(字符传入)

更新时间:2023-07-28 01:59:13 阅读: 评论:0

Linq之动态排序(字符传⼊)
 最近做的是⼀个MVC的项⽬,⾄于MVC是个啥东西,群⾥已经有很多朋友讲过,这⾥不再多讲了,本⽂的前提是在MVC项⽬的View中显⽰Table,
对Table进⾏Sorting和Paging,我都知道View中要实现Sorting和Paging⼀定要有⾃⼰的Action进⾏响应,如果要实现Sorting和Paging,那么我们只能把参数传给Action,但是Action接收Sorting或Paging的参数,如何使⽤Linq实现Sorting和Paging呢?哎,终于说到和主题有关的了,⽽且还是以字符传参的⽅式在Linq中进⾏Sorting有点难实现,这就是我写这篇⽂章的⽬的。此⽂只是本⼈实现Linq的⽅法,如果⾼⼿路过请指点斧正,下⾯就来谈⼀谈。
⼆.本⽂内容
1. Linq中Paging的实现
cur什么意思2. Linq中动态排序的实现
3. 本⽂总结
4. 代码下载()
英语发音词典下载三.Linq Paging的实现
submitted
  其实Paging已经有很多⼈讲过了,其⽂章已经是数不尽数了,其语句相对简单,如下:
  DatabaDataContext db = new DatabaDataContext();
  var result = from s in db.T_BC_PRODUCTs lect s;
  return result .Skip(pageNumber * pageSize).Take(pageSize);西班牙音乐
  以上的代码就实现了Paging的功能。好,Paging我们就说到这⾥,相信⼤家都能明⽩。
四.Linq Sorting动态排序的实现(根据字符参数)
在Linq排序有很多⽅法,⽹络上关于静态排序和部分动态排序的⽂章,⽽静态排序相对来说⽐较简单,也⽐较容易实现,这⾥我就不提了,有需要的朋友可以到⽹上去搜索,相信⼀⼤堆。哈哈!⾄于动态排序⽹上也有部分例⼦,但是我⼀个也没有试成功,呵呵!可能我还没有理解,所以迫于⽆耐就⾃⼰写了个,还请望⾼⼿斧正。
这⾥我们只说如何实现字符参数作为Linq Sorting的条件。
下⾯是实例步骤:
.创建⼀个页⾯,加⼊⼀个Button,⽤来实现排序,实现如下代码Button1_Click所⽰。
1using System;
2using System.Collections;
3using System.Configuration;
4using System.Data;
still是什么意思5using System.Linq;
6using System.Web;
7using System.Web.Security;
8using System.Web.UI;
9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.Xml.Linq;
13using System.Collections.Generic;
14using System.Reflection;
15using System.Linq.Expressions;
16
17namespace LinqTest
18{google code jam
19public partial class _Default : System.Web.UI.Page
20    {
21protected void Page_Load(object nder, EventArgs e)
22        {
23
24        }
25
26protected void Button1_Click(object nder, EventArgs e)
27        {
28            GridView1.DataSource = GetSchoolList("ID","desc",0,0);
29            GridView1.DataBind();
30        }
31
32public IQueryable<T_BC_PRODUCT> GetSchoolList(string sortExpr, string sortDir, long pageNumber, int
pageSize)
33        {
34            DatabaDataContext db =new DatabaDataContext();
35            var result = from s in db.T_BC_PRODUCTs lect s;
36            IQueryable<T_BC_PRODUCT> query = DBHelper.SortingAndPaging<T_BC_PRODUCT>
(result, sortExpr, sortDir,2,3);
37return query;bore
38        }
39    }
40}
. 在Button事件中,我们提供了字符参数“ID”,这是告诉我们按ID字段进⾏排序,那我们把ID是选择升序还是降序排列呢,这时就看后⾯的参数,我们这⾥提供的是desc。OK,到这⾥我们提供了字符参数和按什么样的顺序进⾏排列,当然这⾥也可以根据你的需求⽽传递不同的字段或asc排列⽅式(在我的MVC进⾏中,这些参数是以参数的形式传给Controller的,然后再传递这些参数进⾏排序),这⾥只是⽤aspx.cs⽂件做⽰例。
3. Button事件把参数传给GetSchoolList,下⾯我们来分析这个⽅法。
 这个⽅法其实就是我们在实现应⽤的时候要使⽤的⽅法,他会告诉我们应该返回什么样的数据类型,并且把从DB查询的结果以及排序和分布的参数⼀起传给DBHelper.SortingAndPaging<T_BC_PRODUCT>(result, sortExpr, sortDir,2,3);这个⽅法。这个⽅法就是我们实现排序和分页的主要⽅法。
 这⾥要注意的是我们传递T_BC_PRODUCT类型,这表⽰,我们的排序的字段是在些类型之中的,并且就返回此种类型的结果。SortingAndPaging⽅法的实现如下所⽰:
1#region Copyright(C) 2009 Xiong Wei All rights rerved.
2// ==============================================================================
3// Copyright(C) 2009 Xiong Wei
4//
5// SYSTEM NAME          :
6// COMPONENT ID        : LinqTest.DBHelper
7// COMPONENT DESC      :
8//
9// CREATED DATE/BY    : 2009 / Xiong Wei
10//
11// REVISION HISTORY    :
12// DATE/BY ISSUE#/SR#/CS/PM#/OTHERS    DESCRIPTION OF CHANGE
13//
14//
15// ==============================================================================
16
17#endregion
18using System;
19using System.Data;
20using System.Configuration;
21using System.Linq;
22using System.Web;
23using System.Web.Security;
24using System.Web.UI;
25using System.Web.UI.HtmlControls;
26using System.Web.UI.WebControls;
27using System.Web.UI.WebControls.WebParts;
28using System.Xml.Linq;
29using System.Reflection;
30using System.Linq.Expressions;
31
32namespace LinqTest
33{
34public static class DBHelper
35
you should get over me
36    {
37public static IQueryable<T> DataSorting<T>(IQueryable<T> source, string sortExpression, string
sortDirection)
38        {
39string sortingDir =string.Empty;
40if (sortDirection.ToUpper().Trim() =="ASC")
lohacell
41                sortingDir ="OrderBy";
42el if (sortDirection.ToUpper().Trim() =="DESC")
43                sortingDir ="OrderByDescending";
44            ParameterExpression param = Expression.Parameter(typeof(T), sortExpression);
45            PropertyInfo pi =typeof(T).GetProperty(sortExpression);
46            Type[] types =new Type[2];
47            types[0] =typeof(T);
48            types[1] = pi.PropertyType;
49            Expression expr = Expression.Call(typeof
(Queryable), sortingDir, types, source.Expression, Expression.Lambda(Expression.Property(param, sortExpression), param));
50            IQueryable<T> query = source.AsQueryable().Provider.CreateQuery<T>(expr);
51return query;
52        }
53
54public static IQueryable<T> DataPaging<T>(IQueryable<T> source, int pageNumber, int pageSize)
55        {
56return source.Skip(pageNumber * pageSize).Take(pageSize);
57        }
58
59public static IQueryable<T> SortingAndPaging<T>(IQueryable<T> source, string sortExpression, string
sortDirection, int pageNumber, int pageSize)
60        {
61            IQueryable<T> query = DataSorting<T>(source, sortExpression, sortDirection);
62return DataPaging(query, pageNumber, pageSize);
63        }
64    }
65
66}
  我们对Sorting的代码分析如下:
  ParameterExpression param = Expression.Parameter(typeof(T), sortExpression);
  我们们传⼊的类型中找出我们需要进⾏排序的字段。
  PropertyInfo pi = typeof(T).GetProperty(sortExpression);
  取出要排序字段的相关属性
  Type[] types = new Type[2];
  types[0] = typeof(T); 获得要进⾏排序的数据集的类型。
  types[1] = pi.PropertyType;  取出我们把什么类型的字段进⾏排序(即传⼊参数的值类型)
  ⽣成排序表达式
  IQueryable<T> query = source.AsQueryable().Provider.CreateQuery<T>(expr);武汉理工大学专升本
  执⾏排序
五.本⽂总结
  通过我们应该了解如下知识:
1. Linq中Paging的使⽤。
2. Linq中Sorting的使⽤,本⽂只说明⾃⼰对sorting的实现,只作为参考,希望对你的应⽤有所帮助。
3. 其中有部分反射的内容,需要理解。

本文发布于:2023-07-28 01:59:13,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1120972.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:排序   实现   参数   字段   字符   类型   动态   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图