帮忙看一下,排序的
- 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