Linq 按日期范围分组数据

Linq 按日期范围分组数据,linq,Linq,我想知道如何根据日期范围选择数据范围 我的付款表中有这些数据,格式为dd/mm/yyyy Id Date Amount 1 4/1/2011 300 2 10/1/2011 200 3 27/1/2011 100 4 4/2/2011 300 5 22/2/2011 400 6 1/3/2011 500 7 1/1/2012 600 截止日期为每月27日。所以我想把从27号到下个月26号的所有数据分组 意思是说我希望输出是这样的

我想知道如何根据日期范围选择数据范围

我的付款表中有这些数据,格式为dd/mm/yyyy

 Id Date       Amount

 1   4/1/2011  300
 2  10/1/2011  200
 3  27/1/2011  100
 4   4/2/2011  300
 5  22/2/2011  400
 6   1/3/2011  500
 7   1/1/2012  600
截止日期为每月27日。所以我想把从27号到下个月26号的所有数据分组

意思是说我希望输出是这样的

 Group 1
 1      4/1/2011   300
 2     10/1/2011   200

 Group 2
 1     27/1/2011   100
 2      4/2/2011   300
 3     22/2/2011   400

 Group 3 
 1      1/3/2011   500

 Group 4 
 1      1/1/2012   600

如果您打算经常这样做,那么值得投资一个表,为每个月以及开始和结束日期分配一个唯一的标识符:

CREATE TABLE MonthEndings
(
    MonthID      INTEGER NOT NULL PRIMARY KEY,
    StartDate    DATE NOT NULL,
    EndDate      DATE NOT NULL
);
INSERT INTO MonthEndings VALUES(201101, '27/12/2010', '26/01/2011');
INSERT INTO MonthEndings VALUES(201102, '27/01/2011', '26/02/2011');
INSERT INTO MonthEndings VALUES(201103, '27/02/2011', '26/03/2011');
INSERT INTO MonthEndings VALUES(201112, '27/11/2011', '26/01/2012');
然后,您可以使用以下方法准确分组:

SELECT M.MonthID, P.Id, P.Date, P.Amount
  FROM Payments AS P
  JOIN MonthEndings AS M ON P.Date BETWEEN M.StartDate and M.EndDate
 ORDER BY M.MonthID, P.Date;
任何组标题等都最好从DBMS中处理—SQL以正确的顺序获取数据,而检索数据的软件将其呈现给用户


如果您不能将SQL转换为LINQ,那么我们两个都会这样。对不起,我从未使用过LINQ,所以我不知道其中涉及到什么。

不清楚您的问题的背景。您正在查询数据库吗

如果是这种情况,您询问的是datetime,但似乎有一个字符串格式的列

首先,将您的数据转换为datetime数据类型或其他等效类型,您使用的是什么db引擎?然后使用如下分组条件:

按datepartmonth、dateaddday、-26、[datefield]、DATEPARTyear、dateaddday、-26、[datefield]分组

编辑:

那么,你在林肯? 不同的语言,相同的逻辑:

.GroupBy(x => DateTime
    .ParseExact(x.Date, "dd/mm/yyyy", CultureInfo.InvariantCulture) //Supposed your date field of string data type
    .AddDays(-26)
    .ToString("yyyyMM"));

你想做一些日期时间操作吗?在哪?C、 VB.NET、MS SQL、MySQL、Oracle、PHP?嗨,我想用linq来处理这个问题。谢谢:您应该正确标记您的问题!很抱歉,我正在使用linq to sql。我上面问的问题可以在linq中完成吗?是的,我正在使用linq查询数据库。查询数据库时,如何将GROUPBY代码放入linq查询中?类似这样的东西,var p=from p in db.Payments group p by p.Date.ParseExact??我通常用方法语法编写linq,例如:myIEnumerable.Where….GroupBy….Where….Select。。。。ecc…,但如果您更喜欢关键字语法,您必须这样写:var p=from x in db.Payements group x by DateTime.ParseExactx.Date,….AddDays-26.toString yyyyyyyymm in g select[…],在这里您可以使用select子句中的g.Key以yyyyMM格式获取组名,正如ToString方法中指定的那样,我使用Ovidiu Pacurar提供的答案如下:@belinq:您错过了代码的最终版本,我看不到,但我非常确定您使用了多个DateTime实例。ParseExact:请注意,每个解析操作都非常耗时。在我提出的表达式中,只有一个转换。嗨,BertuPG,谢谢你的回复。你能查一下我用过的密码吗。这两个问题几乎相似,只是第二个问题是按2分组。你能帮我看看吗?
.GroupBy(x => DateTime
    .ParseExact(x.Date, "dd/mm/yyyy", CultureInfo.InvariantCulture) //Supposed your date field of string data type
    .AddDays(-26)
    .ToString("yyyyMM"));