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