C# Linq查询以获取具有重复日期的两个日期之间的行并对它们进行分组

C# Linq查询以获取具有重复日期的两个日期之间的行并对它们进行分组,c#,linq,C#,Linq,我有一个这样的SQL表 ╔════╦════════════════════════════════╦═════════╦══════════╗ ║ Id ║ Date ║ Col3 ║ Col4 ║ ╠════╬════════════════════════════════╬═════════╬══════════╣ ║ 1 ║ 2018-10-30 00:00:00.0000000 ║ ....... ║ .....

我有一个这样的SQL表

╔════╦════════════════════════════════╦═════════╦══════════╗
║ Id ║              Date              ║  Col3   ║   Col4   ║
╠════╬════════════════════════════════╬═════════╬══════════╣
║  1 ║ 2018-10-30 00:00:00.0000000    ║ ....... ║ ........ ║
║  2 ║ 2018-10-31 00:00:00.0000000    ║ ....... ║ ........ ║
║  3 ║ 2018-10-30 00:00:00.0000000    ║ ....... ║ ........ ║
║  4 ║ 2018-10-31 00:00:00.0000000    ║ ....... ║ ........ ║
║  5 ║ 2018-11-01 00:00:00.0000000    ║ ....... ║ ........ ║
╚════╩════════════════════════════════╩═════════╩══════════╝
我希望选择这些行,以便指定开始日期和结束日期,并且响应的格式如下,如果我将开始日期指定为2018-10-31,将结束日期指定为2018-10-30

+----+--------------------------------+---------+----------+
| Id |              Date              |  Col3   |   Col4   |
+----+--------------------------------+---------+----------+
|  1 | 2018-10-30 00:00:00.0000000    | ....... | ........ |
|  2 | 2018-10-31 00:00:00.0000000    | ....... | ........ |
|  3 | 2018-10-30 00:00:00.0000000    | ....... | ........ |
|  4 | 2018-10-31 00:00:00.0000000    | ....... | ........ |
+----+--------------------------------+---------+----------+
我尝试使用以下命令,但没有返回任何内容。我不知道我的问题是否错了

[HttpGet("GetClamped")]
public async Task<IActionResult> GetIntegration([FromQuery] string start, [FromQuery] string end)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    DateTime startDate = DateTime.ParseExact(start, "yyyy-mm-dd", System.Globalization.CultureInfo.InvariantCulture);
    DateTime endDate = DateTime.ParseExact(start, "yyyy-mm-dd", System.Globalization.CultureInfo.InvariantCulture);

    var integration = await _context.Integrations.FirstOrDefaultAsync(t => t.Date > startDate && t.Date < endDate);

    if (integration == null)
    {
        return NotFound();
    }

    return Ok(integration);
}

提前感谢。

有很多可能导致404错误,即:

传递的参数的格式无效,例如yyyy dd mm而不是yyyy mm dd 上下文不使用数据连接到数据库,或者根本没有数据。尝试执行以下操作:var integration=\u context.Integrations.ToList; 要获取一系列项,不能使用FirstOrDefaultAsync函数。用在哪里

为了对元素进行分组,还有另一个函数GroupBy。您可以在此处找到更多函数:

使用

_context.Integrations.FindAll(t => t.Date > startDate && t.Date < endDate).OrderBy(t => t.Date);

希望有帮助

那么Id=1和Id=2的条目在您的逻辑中属于同一个条目?你怎么知道的?只是因为他们有后续Id吗?-第二个应该相当于[…]ORDER BY Date,Id(在SQL中)或SomeQueryableOrEnumerable.OrderByitem=>item.Date.ThenByitem=>item.Id(在LINQ中)。如果出现404错误,则可能调用了错误的操作名称,请检查名称,您的函数具有HttpGet名称,尝试使用其他日期使用DateTime Date属性,该属性将日期截断为午夜。DateTime是一个数字,整数部分是从1/1/01开始的天数,小数部分是X/24小时。使用日期截断数字的小数部分。因此,使用GroupByx=>x.FieldDate.DateItem Id与我的查询无关。选择数据后,我仍然可以访问它。我认为我的linq是错误的。@Nishanchaturanga,数据库中日期列的数据类型是什么,模型的属性是相同的?
_context.Integrations.FindAll(t => t.Date > startDate && t.Date < endDate).OrderBy(t => t.Date);