实体框架 4:Math.Sin()-函数

问题描述 投票:0回答:3

是否可以在 Linq To Entites (Entity Framework 4) -查询中调用 Math.Sin() 函数?

我读到,当前的 Entity Framework 4 没有实现此功能。

也许有解决方法来解决这个问题?

(我不想邀请记忆中的所有条目。)

谢谢并致以诚挚的问候

entity-framework-4
3个回答
1
投票

几个(通常)具有明显 SQL 对应项的函数(例如

Math.Sin
)不能直接在实体框架查询中使用。大概这是因为它们无法可靠地转换为不同的 SQL 实现。然而,大量 MSSQL 特定函数在类
System.Data.Objects.SqlClient.SqlFunctions
中作为静态方法公开。如果您直接调用它们,它们会抛出异常,但如果在 LINQ 查询中使用,它们会被转换为正确的 SQL。

请参阅 这篇博文,了解幕后发生的魔力(即

EdmFunction
属性)。


0
投票

从EF4开始当然可以使用这样的功能。在 EF4 中,EF 团队引入了可以在 linq 中使用的 SqlServer 函数。您应该始终考虑使用规范函数,因为它们与数据库无关,并且每个供应商都应该转换这些函数以存储特定的等效函数。但是,当此类函数不可用时,您可以诉诸 SqlServer 命名空间 (ESQL) 或 SqlFunctions for linq

来自 db.Locations 中的 l 选择 SqlServer.Sin(l.Latitude) + SqlServer.power(l.Longitutde)

我在书中的函数章节中介绍了其中几个选项。具体可以看11-10菜谱在esql中调用数据库函数 11-11 在LINQ中调用数据库函数


0
投票

不幸的是,无法在 LinqToEntities 查询(或 Entity SQL 查询)中调用

Math.Sin

在不首先检索所有对象的情况下实现此目的的唯一方法是编写一个执行您想要的操作的 SQL 查询并通过

ObjectContext.ExecuteStoreQuery
调用它。这并不像听起来那么糟糕,因为您仍然可以获取输入的结果


编辑:阅读其他答案后,似乎可以调用这些类型的函数(SqlFunctions包含 44 个具有各种重载的函数)。我保留原来的答案,因为这是实现相同结果的另一种方式。

    

© www.soinside.com 2019 - 2024. All rights reserved.