Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EFCore OrderBy未按日期正确排序字段_C#_.net Core_Ef Core 3.1 - Fatal编程技术网

C# EFCore OrderBy未按日期正确排序字段

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

我在一个有日期字段的数据库表中列出了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 = 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();
    }
}