如何在 EntityFrameworkCore 中使用 Difference 函数?
How to use Difference function in EntityFrameworkCore?
我要执行这个查询:
Select * From Products WHERE Title like '%search text%'
ORDER BY Difference(Title, 'search text') DESC
现在我想使用 EntityFrameworkCore 和 linq 来实现上述查询。
那么如何调用差异函数来按标题列中最接近的匹配项订购产品?
SQL看不懂c#写的Difference
函数。要使其正常工作,您必须从 c# collection like List
中的 Products table 获取值
然后使用 Difference
函数
对该列表进行排序
每个 IQueryable
都有一个 Expression
和一个 Provider
。 Expression
包含必须执行的查询。 Provider
知道谁必须执行查询,通常是数据库管理系统。 Provider
的任务是将 Expression
翻译成数据库可以理解的语言(类似 SQL 的语言)并执行查询。 Provider
将以高效的方式获取结果,并且 return 将查询的数据作为可枚举对象。
IQueryable
实现 IEnumerable
。
当您使用 ToList()
、FirstOrDefault()
、Any()
等 LINQ 函数或在 foreach
中使用查询时,会在内部调用 IEnumerable.GetEnumerator()
和 Enumerator.MoveNext()
这将命令 Provider
将 Expression
翻译成 SQL 并执行查询。 returned 枚举用于枚举 returned 项。
实现 IQueryable
的 class 程序员的任务是实现 Expression
到 SQL 的翻译。这并不容易,我认为创建 entity framework 的人做得很好。
但是,SQL 中已知的一些项目很难实施。其中包括 SoundEx 和 Difference 的概念。我不确定,但我认为造成困难的原因之一是它们通常用于 SQL,而不是用于任何其他类型的 IQueryable 系统。
事实上,entity framework 不支持一些功能。参见 Supported and unsupported LINQ methods (LINQ to entities)。
您的 DbContext 是数据库模型的抽象表示。它的用户不应该关心它是否使用 Microsoft SQL、MySQL,或者它是否是一个不使用任何类似于 SQL.
的数据集合
但是,如果您完全确定可以将 DbContext 限制为仅适用于某种类型的数据库(了解 SoundEx 和 Difference 的概念),请考虑为您的查询创建一个存储过程。参见 How to call a Stored Procedure in Entity Framework
我要执行这个查询:
Select * From Products WHERE Title like '%search text%'
ORDER BY Difference(Title, 'search text') DESC
现在我想使用 EntityFrameworkCore 和 linq 来实现上述查询。
那么如何调用差异函数来按标题列中最接近的匹配项订购产品?
SQL看不懂c#写的Difference
函数。要使其正常工作,您必须从 c# collection like List
然后使用 Difference
函数
每个 IQueryable
都有一个 Expression
和一个 Provider
。 Expression
包含必须执行的查询。 Provider
知道谁必须执行查询,通常是数据库管理系统。 Provider
的任务是将 Expression
翻译成数据库可以理解的语言(类似 SQL 的语言)并执行查询。 Provider
将以高效的方式获取结果,并且 return 将查询的数据作为可枚举对象。
IQueryable
实现 IEnumerable
。
当您使用 ToList()
、FirstOrDefault()
、Any()
等 LINQ 函数或在 foreach
中使用查询时,会在内部调用 IEnumerable.GetEnumerator()
和 Enumerator.MoveNext()
这将命令 Provider
将 Expression
翻译成 SQL 并执行查询。 returned 枚举用于枚举 returned 项。
实现 IQueryable
的 class 程序员的任务是实现 Expression
到 SQL 的翻译。这并不容易,我认为创建 entity framework 的人做得很好。
但是,SQL 中已知的一些项目很难实施。其中包括 SoundEx 和 Difference 的概念。我不确定,但我认为造成困难的原因之一是它们通常用于 SQL,而不是用于任何其他类型的 IQueryable 系统。
事实上,entity framework 不支持一些功能。参见 Supported and unsupported LINQ methods (LINQ to entities)。
您的 DbContext 是数据库模型的抽象表示。它的用户不应该关心它是否使用 Microsoft SQL、MySQL,或者它是否是一个不使用任何类似于 SQL.
的数据集合但是,如果您完全确定可以将 DbContext 限制为仅适用于某种类型的数据库(了解 SoundEx 和 Difference 的概念),请考虑为您的查询创建一个存储过程。参见 How to call a Stored Procedure in Entity Framework