C# EFCore OrderBy未按日期正确排序字段
我在一个有日期字段的数据库表中列出了146项。从我的理解来看,由于EF无法保证批量插入的顺序,所以在表中它们没有特定的顺序。因此,我使用以下方法提取所有内容:C# EFCore OrderBy未按日期正确排序字段,c#,.net-core,ef-core-3.1,C#,.net Core,Ef Core 3.1,我在一个有日期字段的数据库表中列出了146项。从我的理解来看,由于EF无法保证批量插入的顺序,所以在表中它们没有特定的顺序。因此,我使用以下方法提取所有内容: // Records is a complex object consisting of a bunch of doubles, an integer ID, and a date // Date is a DateTime, but with a time component of midnight. var rawData = awa
// Records is a complex object consisting of a bunch of doubles, an integer ID, and a date
// Date is a DateTime, but with a time component of midnight.
var rawData = await Task.Run(() =>_context.Records.OrderBy(item => item.Date).ToList());
奇怪的是当我看汽车窗口时会发生什么。以下是最后12项的日期:
2020年7月31日
8/1/2020
8/2/2020
8/3/2020
8/4/2020
8/5/2020
8/6/2020
8/7/2020
8/8/2020
8/11/2020
8/10/2020
2020年8月9日
那是。。。没有完全排序,尽管这是我输入数据的顺序
有趣的是,该列表确实显示出排序的迹象。SQLite中的表使用一个标识列,下面是这5个项目的ID,它们的顺序与它们在自动窗口中的显示顺序相同:
五十二
46
47
48
49
50
51
71
143
144
145
146
正如你所看到的,由于缺乏更好的措辞,它看起来是半排序的。具体地说,我展示的前9个数据点,以及到那一点为止的所有数据点都正确排序。然后我添加了一个数据点8/11,重新请求数据,结果看起来不错。然后我添加了下一个数据点8/10,重新请求数据,现在我添加的两个点都未排序。与下一个8/9相同
前143个数据点与后三个数据点之间的区别在于,前三个数据点已经存在于SQLite文件中。最后三个是为了测试我的应用程序上的添加/编辑功能而添加的,因此它们是在应用程序中创建的,并在调试会话期间写入文件
我在这里不知所措。我是不是遗漏了什么?我的等待会把事情搞砸吗?或者我需要使用AsNoTracking来进行数据排序吗?试试这个
var rawData = await context.Records.OrderBy(item => item.Date).ToListAsync();
您的上下文是如何初始化的
你可以试试
using (var context = serviceProvider.GetService<RecordsContext>())
{
var rawData = await context.Records.OrderBy(item => item.Date).ToListAsync();
}
或
SQLite没有日期时间数据类型,很可能您使用的是文本。如果您正在转换为DateTime,则可以在执行查询后对其进行排序。无骰子。TolistSync没有修复它。谢谢你!根据你的第二个例子,我使用DI来获取我的上下文。
public class MyController
{
private readonly RecordsContext _context;
public MyController(RecordsContext context)
{
_context = context;
}
public async Task<List<Record>> GetRecords()
{
return await _context.Records.OrderBy(item => item.Date).ToListAsync();
}
}