首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

帮忙看一下,排序的解决方案

2012-02-03 
帮忙看一下,排序的C# code{if (!IsPostBack){IsLogin()ViewState[SortOrder] ContactNumViewState

帮忙看一下,排序的

C# code
     {      if (!IsPostBack)            {                IsLogin();                ViewState["SortOrder"] = "ContactNum";                ViewState["OrderDire"] = "ascending";                 GvDataBind();            }        }  private void GvDataBind()        {            int year = Convert.ToInt32(Request.QueryString["ddlYear"]);                        var contracts = from c in db.B_Contract_Out                            join h in db.B_Hospital on c.HospitalID equals h.ID into ch                            where c.C4 == "1"                            from chs in ch.DefaultIfEmpty()                            join u in db.sys_User on c.PrincipalUser equals u.UserID into cu                            from cus in cu.DefaultIfEmpty()                            join p in db.B_PayRecord on c.ID equals p.ContractID into cp                            from cps in cp.DefaultIfEmpty()                            where c.AllMoney != Convert.ToDouble(cps.PayMoney)                            where c.CreateTime.Value.Year == year                            where c.ContractType == type                            orderby c.ContractDate descending                            orderby "c." + ViewState["SortOrder"] + " " + ViewState["OrderDire"]                            select new                            {                                payMoney = GetPayedMoney(c.ID),                                ArmNames = GetArmariumName(c.ID),                                  ....                                cus.U_CName,                                qiankuan = GetQianKuan(Convert.ToDouble(c.AllMoney), c.ID)                            };            var cons = contracts.ToList().Where(c => GetQianKuan(Convert.ToDouble(c.AllMoney), c.ID) != 0);                        //去除重复项            var con = cons.Distinct();            GvContract.DataSource = con;            GvContract.DataBind();     protected void GvContract_Sorting(object sender, GridViewSortEventArgs e)        {            string sPage = e.SortExpression;            if (ViewState["SortOrder"].ToString() == sPage)            {                if (ViewState["OrderDire"].ToString() == "descending")                    ViewState["OrderDire"] = "ascending";                else                    ViewState["OrderDire"] = "descending";            }            else            {                ViewState["SortOrder"] = e.SortExpression;            }            GvDataBind();        }


[解决办法]
orderby "c." + ViewState["SortOrder"] + " " + ViewState["OrderDire"]

这语法是不行的

linq 不想sql那么可以拼语句
[解决办法]
有些地方linq也无能为力
还是用会sql把
[解决办法]
神啊!!!救救你吧
[解决办法]
如果用的是Linq2EF的话,不是 "c." 是 "it."
[解决办法]
这需要用到反射:

C# code
  orderby c.ContractDate descending ,GetPropertyValue(c,ViewState["SortOrder"].ToString()) ascending,GetPropertyValue(c,ViewState["OrderDire"].ToString()) ascending    private static object GetPropertyValue(object obj, string property)  {      System.Reflection.PropertyInfo propertyInfo=obj.GetType().GetProperty(property);      return propertyInfo.GetValue(obj, null);  }
------解决方案--------------------


不是直接用 linq orderby

改用 lambda 的:

contracts.Orderby("...") 当然你还要下 Dynamic.cs
[解决办法]
http://blog.csdn.net/q107770540/article/details/6133484
[解决办法]
再.ToString()下。
[解决办法]
不是吧,写成 这么复杂, 难道 没有建关系吗?
或者 能不能直接执行sql语句啊
[解决办法]
看下是不是 查询语句中哪个缺少空格
[解决办法]
order by 之间要有空格
[解决办法]
LINQ 对多表查询不是很给力
建议还是用SQL 或者 那个LINQ的升级版 叫什么e什么的······
[解决办法]

探讨

引用:
贴完以后 才知道多余了,就是 排序那块,怎么不行啊,我想点一下标头升序或降序

点一下升序,再点一下降序
神们。。

[解决办法]
学一下entity framework吧, 这个东西比linq要强得多. 其实我觉得在查询很复杂的时候, 逼着写linq真是吃亏不讨好---费时, 但效率可能还低.
[解决办法]
var cons = contracts.ToList().Where(c => GetQianKuan(Convert.ToDouble(c.AllMoney), c.ID) 
var consorder = cons.OrderBy(p => p.U_CName).ThenBy(p => p.ArmNames).ToList();
增加红色部分,绑定consorder

热点排行