我有下表:
工资表:工资、员工工资、基本工资、月工资、年工资、净工资
年份表:年,渴望。(渴望是20132014…)
月份表:月ID,月名称。(月名是一月,二月…)
emp_master:empid,empname
我在我的网格视图中有以下记录,这些记录是我直接从表中获取的,没有任何条件。
我的表格包含如下记录:
企业名称净工资月年
abc 4000 2013年12月
xyz 4000 dec 2013
abc 4000 2014年2月
xyz 4000 2014年2月
abc 2014年3月5000日
xyz 5000 mar 2014
现在我想按月份和年份的顺序显示记录,首先应该显示最高月份的记录,即march,然后feb。
我想要这样的输出:
企业名称净工资月年
abc 2014年3月5000日
xyz 5000 mar 2014
abc 4000 2014年2月
xyz 4000 2014年2月
abc 4000 2013年12月
xyz 4000 dec 2013
我已经编写了这样的查询,它只是按照表中的原样显示记录。
var data = (from s in context.Salary_Masters
select new {name = s.emp_master.empname,
s.net_pay,
mnth=s.Month_Master.month_name,
year=s.Year_Master.year_name });
此处{查询中用作匿名类型的名称、年份和年份是我的网格视图的数据文本字段的名称。}
有人能编辑我的linq查询以满足我的需求吗????
请帮帮我。我是林克的新手,所以我不知道如何写这个问题。
试试这个(不是在飞行中测试制造)
var data = (from s in context.Salary_Masters select new {name = s.emp_master.empname,s.net_pay,mnth=s.Month_Master.month_name,year=s.Year_Master.year_name }).orderby(z=> z.mnth,z.year);
如果你只需要使用月份名称,那么按时间排序就会很困难。如果你的月份ID碰巧是按时间顺序排列的(例如1=1月,2=2月等),你可以这样做:
var data =
from s in context.Salary_Masters
orderby s.year_name, s.month_id
select new {
name = s.emp_master.empname,
s.net_pay,
mnth = s.Month_Master.month_name,
year = s.Year_Master.year_name
};
或者,您可以添加一个数字monthvalue列,并按其进行排序。
对不起,我刚刚注意到你实际上想要按降序排列,所以请这样做:
orderby s.year_name descending, s.month_id descending
这样尝试:
var data = (from s in context.Salary_Masters
orderby s.Month_Master.month_name,s.Year_Master.year_name
select new {name = s.emp_master.empname,
s.net_pay,
monthName=s.Month_Master.month_name,
monthId = s.Month_Master.monthid,
year=s.Year_Master.year_name });
或者你可以尝试这样的lambda表达式:
var list = context.Salary_Masters.Select(x=>new {x.emp_master.empname,
x.net_pay,
x.Month_Master.month_name,
x.Month_Master.monthid
x.Year_Master.year_name}).ToList();
list = list.OrderByDescending(x => x.Year_Master.year_name).
ThenBy(x=>x.Month_Master.monthid).ToList();