Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Sql server 如何在EntityFrameworkCore中使用差分函数?_Sql Server_Linq_Entity Framework Core_Sql Function - Fatal编程技术网

Sql server 如何在EntityFrameworkCore中使用差分函数?

Sql server 如何在EntityFrameworkCore中使用差分函数?,sql-server,linq,entity-framework-core,sql-function,Sql Server,Linq,Entity Framework Core,Sql Function,我要执行以下查询: Select * From Products WHERE Title like '%search text%' ORDER BY Difference(Title, 'search text') DESC 现在我想使用EntityFrameworkCore和linq实现上述查询 那么,我如何调用difference函数来按标题列中最接近的匹配订购产品呢?SQL无法理解用c#编写的difference函数。要使其工作,您必须从c#类集合列表中的Products表中获取值 然

我要执行以下查询:

Select * From Products WHERE Title like '%search text%' 
ORDER BY Difference(Title, 'search text') DESC
现在我想使用EntityFrameworkCorelinq实现上述查询


那么,我如何调用difference函数来按标题列中最接近的匹配订购产品呢?

SQL无法理解用c#编写的
difference
函数。要使其工作,您必须从
c#类集合列表中的Products表中获取值


然后使用
Difference
函数对该列表进行排序

每个
IQueryable
包含一个
表达式
和一个
提供者
表达式包含必须执行的查询。
提供者
知道谁必须执行查询,通常是数据库管理系统。
提供者的任务是将
表达式
翻译成数据库能够理解的语言(类似SQL)并执行查询。
提供程序
将以有效的方式获取结果,并将查询的数据作为可枚举对象返回

IQueryable
实现
IEnumerable

当您使用LINQ函数,如
ToList()
FirstOrDefault()
Any()
,或在
foreach
中使用查询时,会在内部调用
IEnumerable.GetEnumerator()
,并调用
Enumerator.MoveNext()

这将命令
提供程序
表达式
转换为SQL并执行查询。返回的可枚举项用于枚举返回的项

实现
IQueryable
的类程序员的任务是将
表达式
转换为SQL。这并不容易,我认为创建实体框架的人做得很好

但是,SQL中已知的某些项很难实现。其中包括SoundEx和Difference的概念。我不确定,但我认为造成这一困难的原因之一是它们通常用于SQL,而不是任何其他类型的IQueryable系统

事实上,实体框架不支持一些功能。看

DbContext是数据库模型的抽象表示。它的用户不应该关心它是否使用MicrosoftSQL、MySQL,或者它是否是一个不使用任何类似SQL的数据收集


<>但是如果你绝对确定将你的数据库上下文限制为某种类型的数据库,一个知道SoNexx和差异的概念,考虑为你的查询创建一个存储过程。如果我有一个匹配1000种产品的查询,请参见。这是否意味着我需要获取它们并将它们作为内存集合进行排序?因此,我必须执行存储过程来执行上面的查询,该查询使用SoundEx和Difference。如果您想使用SQL Difference,那么显然您需要这样做。另一种可能是在不进行排序的情况下获取数据,并使用本地
差异
函数进行排序。但我认为这样的函数将很难找到,特别是因为它没有严格指定它应该返回什么