Linq-从特定日期选择组

时间:2012-08-02 15:12:48

标签: c# linq linq-to-sql

问题:希望选择每种类型的1行

表: EntryPrices

AttendingTypesId(int)

名称(nvarchar)

价格(国际)

GroupId(int)

FromDate(DateTime)// yyyy-MM-dd

示例: 基本条目 - 100 - 1 - 2012-08-01

赞助商参赛作品 - 350 - 2 - 2012-08-01

员工入职 - 70 - 3 - 2012-08-01

基本参赛作品 - 150 - 1 - 2012-10-01

基本参赛作品 - 200 - 1 - 2012-12-01

如您所见,有3个基本条目。每个都有效,具体取决于他们注册的日期。 因此,如果一个人在9月中旬登记,他可以获得100 150年11月中旬和12月200日结束。

但是我希望根据今天的日期获得“有效”费用,我想在下拉列表中列出。

  

所以,如果我今天(2012-aug-02)查询这个,我应该得到以下内容   行:

     

基本参赛作品 - 100 - 1 - 2012-08-01

     

赞助商参赛作品 - 350 - 2 - 2012-08-01

     

员工入职 - 70 - 3 - 2012-08-01

     

如果我查询这个(2012-dec-20),我应该得到以下行:

     

赞助商参赛作品 - 350 - 2 - 2012-08-01

     

员工入职 - 70 - 3 - 2012-08-01

     

基本参赛作品 - 200 - 1 - 2012-12-01

我如何在linq-to-sql中构造它?

我的想法是这样的:

var f = from data in mc.AttendingTypes
                    where DateTime.Now.CompareTo(data.FromDate) > 0
                    group data by new { data.GroupId, data.Name, data.Price, data.AttendingTypesId }
                    into newData
                    select new { newData.Key.Name, newData.Key.Price, newData.Key.AttendingTypesId };

1 个答案:

答案 0 :(得分:0)

我宁愿做那样的事情:

var today = DateTime.Now;

var result = mc.AttendingTypes
             .Where(at => at.FromDate <= today)
             .GroupBy(at => at.GroupId)
             .Select(g => g.OrderByDescending(m => m.FromDate).FirstOrDefault())
             .ToList();