LINQ to Entity查询可以使用SQL级别函数吗?

我希望我可以编写调用其他函数的LINQ to Entity查询:

from c in context.Widgets where MyFunc(c.name) select c 

这会导致错误,因为表达式显然无法转换为调用MyFunc的TSQL。

嗯,我在想,除非MyFunc是用户定义的函数或(我认为更好)SQL / CLR函数。

这是可能的,而且是推荐的吗?

如果不可能,我希望这个function有效并且可能会被ADO.NET的未来解决吗?

您应该在数据库中创建一个用户定义的函数MyFunc ,并将其手动“导入”您的上下文(edmx,首先是数据库),在XML中以及作为上下文类的部分类中的存根。 该过程在此处描述:

如何使用自定义数据库函数 (请注意,“StorageNamespace”是您在下的XML文件中找到的

MSDN有类似的描述。

EF倾向于将.net类与数据库的结构同步,并且最好是数据库是哑的并且所有逻辑都在类中。

但是你可以映射到函数和存储过程 – 它有点技术性解释(更容易做) – 让我为你找到一些链接。

这是一个糟糕的方法:

 // Query that calls the OrderTotal function to recalculate the order total. string queryString = @"USING Microsoft.Samples.Entity; FUNCTION OrderTotal(o SalesOrderHeader) AS (o.SubTotal + o.TaxAmt + o.Freight) SELECT [order].TotalDue AS currentTotal, OrderTotal([order]) AS calculated FROM AdventureWorksEntities.SalesOrderHeaders AS [order] WHERE [order].Contact.ContactID = @customer"; int customerId = 364; using (AdventureWorksEntities context = new AdventureWorksEntities()) { ObjectQuery query = new ObjectQuery(queryString, context); query.Parameters.Add(new ObjectParameter("customer",customerId)); foreach (DbDataRecord rec in query) { Console.WriteLine("Order Total: Current - {0}, Calculated - {1}.", rec[0], rec[1]); } } 

http://msdn.microsoft.com/en-us/library/dd490951.aspx

这是如何正确地做到这一点:

http://scipbe.wordpress.com/2010/08/30/stored-procedures-udfs-in-the-entity-framework-part-1/