帮忙看一下,排序的

zzc_king 2011-07-07 04:00:25

{
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();
}
...全文
262 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
coder_s 2011-08-19
  • 打赏
  • 举报
回复
去查下动态排序就行了,或给你代码

public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string orderByProperty,
bool desc) where TEntity : class
{

string command = desc ? "OrderByDescending" : "OrderBy";

var type = typeof(TEntity);

var property = type.GetProperty(orderByProperty);

var parameter = Expression.Parameter(type, "p");

var propertyAccess = Expression.MakeMemberAccess(parameter, property);

var orderByExpression = Expression.Lambda(propertyAccess, parameter);

var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },

source.Expression, Expression.Quote(orderByExpression));

return source.Provider.CreateQuery<TEntity>(resultExpression);

}
zzc_king 2011-07-19
  • 打赏
  • 举报
回复
我不是想要排列几列,我是想定义一个变量(列名),根据这个变量值而排序哪一列
zzc_king 2011-07-18
  • 打赏
  • 举报
回复
不是固定死的,现在主要是值传过来了,但是不能做正确的处理。。。
Connie 2011-07-18
  • 打赏
  • 举报
回复
据我了解linq不能像sql那样同事对表里的两个列排序,它一次只能对一个列排序;即使你这样写了也只会对第一个排序的(orderby a,b descending 即:只对这里的a进行排序)

你也可以这样写写试试看:where条件结束后 .OrderByDescending(对象 => 对象.要排序的属性).ToList();

zzc_king 2011-07-15
  • 打赏
  • 举报
回复
暂时我用的麻烦的方法,一个一个判读,这样性能上肯定有负担,希望高手能有简便的方法 不吝赐教。。。
分给你留着
征服者X 2011-07-15
  • 打赏
  • 举报
回复
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
zzc_king 2011-07-14
  • 打赏
  • 举报
回复
怎么办,黔驴技穷了
zzc_king 2011-07-13
  • 打赏
  • 举报
回复
嗯, 不过现在这个项目没有一条SQL语句 只能用Linq了
吉普赛的歌 2011-07-13
  • 打赏
  • 举报
回复
学一下entity framework吧, 这个东西比linq要强得多. 其实我觉得在查询很复杂的时候, 逼着写linq真是吃亏不讨好---费时, 但效率可能还低.
zzc_king 2011-07-12
  • 打赏
  • 举报
回复
报错了,无法按类型“System.Object”排序。
q107770540 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 zzc_king 的回复:]

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

点一下升序,再点一下降序
神们。。
[/Quote]
早说清楚 就不会绕弯了
 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
select new
{
payMoney = GetPayedMoney(c.ID),
ArmNames = GetArmariumName(c.ID),
....
cus.U_CName,
qiankuan = GetQianKuan(Convert.ToDouble(c.AllMoney), c.ID)
};
contracts = ViewState["OrderDire"] == "ascending"?contracts.OrderBy(o=>GetPropertyValue(o,ViewState["SortOrder"].ToString())) :
contracts.OrderByDescending(o=>GetPropertyValue(o,ViewState["SortOrder"].ToString()));
var cons = contracts.ToList().Where(c => GetQianKuan(Convert.ToDouble(c.AllMoney), c.ID) != 0);
//去除重复项
var con = cons.Distinct();
GvContract.DataSource = con;
GvContract.DataBind();


private static object GetPropertyValue(object obj, string property)
{
System.Reflection.PropertyInfo propertyInfo=obj.GetType().GetProperty(property);
return propertyInfo.GetValue(obj, null);
}

zzc_king 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zzc_king 的回复:]
贴完以后 才知道多余了,就是 排序那块,怎么不行啊,我想点一下标头升序或降序
[/Quote]
点一下升序,再点一下降序
神们。。
chentl_1987 2011-07-09
  • 打赏
  • 举报
回复
LINQ 对多表查询不是很给力
建议还是用SQL 或者 那个LINQ的升级版 叫什么e什么的······
zzc_king 2011-07-08
  • 打赏
  • 举报
回复
有关系, 整个项目都是Linq。。。
claymore1114 2011-07-08
  • 打赏
  • 举报
回复
不是吧,写成 这么复杂, 难道 没有建关系吗?
或者 能不能直接执行sql语句啊
zzc_king 2011-07-08
  • 打赏
  • 举报
回复
也是不行的 /ch
zzc_king 2011-07-08
  • 打赏
  • 举报
回复
Linq 查询。。。
专心做码农 2011-07-08
  • 打赏
  • 举报
回复
order by 之间要有空格
专心做码农 2011-07-08
  • 打赏
  • 举报
回复
看下是不是 查询语句中哪个缺少空格
zzc_king 2011-07-08
  • 打赏
  • 举报
回复
帮忙指教指教啊
加载更多回复(13)

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧