是否有可能在Linq To Entites(实体框架4)-Query中调用Math.Sin()函数?
我已经读过,当前的Entity Framework 4没有实现这个功能。
也许这个解决问题的解决方法是什么?
(我不想邀请内存中的所有条目。)
谢谢和最好的问候
答案 0 :(得分:1)
(通常)具有明显SQL对应项的几个函数(如Math.Sin
)不能直接在Entity Framework查询中使用。大概这是因为它们无法可靠地转换为不同的SQL实现。但是,大量的MSSQL特定函数在类System.Data.Objects.SqlClient.SqlFunctions
中作为静态方法公开。如果直接调用它们,它们会抛出异常,但如果在LINQ查询中使用,则会转换为正确的SQL。
请参阅this blog post了解封面下发生的魔法(即EdmFunction
属性)。
答案 1 :(得分:0)
不幸的是,在LinqToEntities查询(或实体SQL查询)中调用Math.Sin
是不可能的。
实现此目的的唯一方法是首先编写一个执行所需操作的SQL查询,然后通过ObjectContext.ExecuteStoreQuery
调用它。这并不像听起来那么糟糕,因为你仍然可以get back typed results。
编辑:在阅读其他答案之后,似乎 可以调用这些类型的函数(SqlFunctions
包含44个具有各种重载的函数)。我保留原来的答案,因为这是实现相同结果的另一种方式。
答案 2 :(得分:0)
当然可以使用从EF4开始的这种功能。在EF4中,EF团队引入了可以在linq中使用的SqlServer函数。您应该始终考虑使用规范函数,因为它们与数据库无关,并且每个供应商都应将这些函数转换为存储特定的等效函数。但是,当这些函数不可用时,您可以使用SqlServer命名空间(ESQL)或SqlFunctions来获取linq
来自db.Locations中的l 选择SqlServer.Sin(l.Latitude)+ SqlServer.power(l.Longitutde)
我在本书的功能章节中介绍了其中的几个选项。具体来说,你可以在esql中查看11-10 recipe调用数据库函数 11-11在LINQ中调用数据库函数