linq查询以按年和月的顺序显示记录

时间:2014-04-09 17:52:42

标签: linq

我有下表:

工资表: 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非常新,所以我不知道如何写这个查询。

3 个答案:

答案 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();