使用实体框架核心和SQLite进行十进制/日期排序

时间:2019-04-10 15:46:24

标签: sqlite asp.net-core .net-core entity-framework-core system.data.sqlite

使用Entity Framework Core(代码优先)和SQLite,将Guid存储为二进制文件,但将Decimal和Date字段存储为Microsoft提供程序的文本。

我了解他们可能不希望DOUBLE的货币金额不准确,因此使用文字。

如果我需要分类怎么办? Entity Framework Core是否足够聪明,可以按预期进行排序(但速度较慢,因为它需要解析所有内容!),还是按字母排序而不是按数字排序?我不希望它在2之前返回100。

我将不得不执行“给我最新订单”之类的事情,那么最好的方法是什么?我想确保它能正常工作。

我是否最好切换到System.Data.SQLite提供程序以UNIX格式存储日期(Microsoft的提供程序不支持此日期)?然后我必须自己来回解析还是可以自动处理呢?

1 个答案:

答案 0 :(得分:0)

我自己仍在学习system.data.sqlite,但我知道您可以创建自定义归类并将其分配给您的列。排序规则既可以分配给表列,也可以仅分配给特定视图或使用标准sqlite SQL语法和COLLATE关键字的查询。

这不是完整的示例/教程,但对于初学者来说,请访问the Microsoft.data.sqlite docs。另请参见this stack overflow answer。这些只是提示,但是提供了一种一致的方法来执行此操作。请记住,sqlite是一个进程内数据库引擎,因此它仍然应该非常高效,并且仍然可以以常规方式使用数据库,而不必在查询之间不断插入自定义逻辑。一旦定义好自定义排序规则并正确注册,它应该是无缝的,也许只有附加的附加要求,例如COLLATE customDecimal到ORDER BY子句。

自定义归类功能会将字符串值转换为适当的数字类型并返回比较。它与本机.Net IComparer和IComparison接口/实现非常相似。