LINQ TO ENTITY加入多个集合

问题描述

| 我正在使用LINQ to Entites将一些旧版sql Server存储过程转换为EF4。 在一种情况下,我有一个存储过程,可以从3个不同的Table_Valued函数中进行选择 喜欢
 Select * from Function1 F1,Function2 F2,Function3 F3
 where F1.ID = F2.ID and
       F2.ID = F3.ID  (i am showing it simple)
其中Function1 F1,Function2 F2和Function3 F3是3个sqlserver Table_Valued函数  返回表变量。 如果有人可以建议这种情况下的最佳做法,那就太好了,  目前,我现在正在使用的是3种不同的C#方法(其模拟功能sql Server函数功能相同),该方法返回一个集合,然后将所有这3个集合连接在一起以获得最终结果集。 我们是否对此有另一种解决方案,我认为通过使用上述解决方案,代码将对数据库调用3次调用,而不是一起调用一切。 我希望代码调用一个sql,而不是多个调用。 提前致谢 !     

解决方法

        这里的主要问题是EF不支持表值函数。您的解决方案还有另一个可怕的问题。使用三个.NET函数模拟您的函数实际上会调用数据库3次(=最有可能是到数据库的三个连续往返),但它还会将每个函数的整个结果集提取到您的应用程序中,并在应用程序服务器的内存中执行联接。在大多数情况下,这是不可接受的。 正确的解决方案取决于函数的内部实现,因为也许可以将它们转换为linq-to-entities或ESQL。如果没有,那么您仍然可以使用存储过程!不替换存储过程是EF的公开秘密。使用它们时,它们仍然是您的武器库的一部分。