0

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

表: EntryPrices

参加类型 ID (int)

名称 (nvarchar)

价格(整数)

GroupId (int)

FromDate(日期时间) //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 月中旬注册,他将在 150 年 11 月中旬和 200 年 12 月结束时获得 100 个。

但是,我想根据今天的日期获得“有效”费用,并且我想将其列在下拉列表中。

因此,如果我今天(2012 年 8 月 2 日)查询这个,我应该得到以下行:

基本条目 - 100 - 1 - 2012-08-01

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

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

如果我查询这个(2012 年 12 月 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 };
4

1 回答 1

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();
于 2012-08-02T15:44:39.743 回答