我有下表:
工资表: salaryid,empid,basic,monthid,yearid,net salary
年表: 年份,年名。(年名是2013,2014 ......)
月表: monthid,monthname 。(月份名称为jan,feb ...)
emp_master: 的 EMPID,empname
我在gridview中有以下记录,我无需任何条件直接从表中获取。
我的表包含以下记录,如下所示:
empname netsalary month year
abc 4000 dec 2013
xyz 4000 dec 2013
abc 4000 feb 2014
xyz 4000 feb 2014
abc 5000 mar 2014
xyz 5000 mar 2014
现在我希望按照月份和年份的顺序显示记录,首先它应显示 3月的最高月份记录,然后 feb 。
我想要这样的输出:
empname netsalary month year
abc 5000 mar 2014
xyz 5000 mar 2014
abc 4000 feb 2014
xyz 4000 feb 2014
abc 4000 dec 2013
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 });
此处{名称,第十年和第一年在查询中用作自主类型是我的gridview的datatextfield的名称。}
任何人都可以编辑我的linq查询以满足我的需求????
请请帮助我。我对linq非常新,所以我不知道如何写这个查询。
答案 0 :(得分:1)
尝试这个(不是即时测试)
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);
答案 1 :(得分:1)
如果您所拥有的只是月份名称,那么您将难以按时间顺序排序。如果您的月份ID恰好按时间顺序排列(例如1 = Jan,2 = Feb等),您可以这样做:
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
};
或者您可以添加一个数字month_value列,然后按其排序。
对不起,我刚刚发现你确实想要它们按降序排列,所以请:
orderby s.year_name descending, s.month_id descending
答案 2 :(得分:0)
试试这样:
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();