首页 > 解决方案 > Linq查询以获取具有重复日期的两个日期之间的行并将它们分组

问题描述

我有一张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);
}

如果我想将相似的日期组合在一起,我该怎么做?例如:

+----+--------------------------------+---------+----------+
| Id |              Date              |  Col3   |   Col4   |
+----+--------------------------------+---------+----------+
|  1 | 2018-10-30 00:00:00.0000000    | ....... | ........ |
|  3 | 2018-10-30 00:00:00.0000000    | ....... | ........ |
|  2 | 2018-10-31 00:00:00.0000000    | ....... | ........ |
|  4 | 2018-10-31 00:00:00.0000000    | ....... | ........ |
+----+--------------------------------+---------+----------+

先感谢您。

标签: c#linq

解决方案


出现 404 错误的原因有很多,即:

  1. 传递的参数格式无效,例如。yyyy-dd-mm 而不是 yyyy-mm-dd
  2. 上下文不使用数据连接到数据库或根本没有数据。尝试执行以下操作:var integration = _context.Integrations.ToList();

要获得一系列项目,您不能使用该FirstOrDefaultAsync功能。对于那个用途Where

为了对元素进行分组 - 还有另一个功能GroupBy。您可以在此处找到更多功能:https ://msdn.microsoft.com/en-us/library/system.data.entity.queryableextensions(v=vs.113).aspx


推荐阅读