如何将sp加入表Linq

时间:2011-02-23 09:37:07

标签: c# .net linq entity-framework linq-to-entities

我使用EF(edmx不是代码优先),我想将sp加入'普通'表,所以我使用以下linq查询:

var test = (from obj1 in e.myTable
            join obj2 in e.MySp(aString) on obj1.AStringProperty equals obj2.AStringProperty
            select r.description).ToList();

然后使用以下消息抛出NotsupportedException:

Unable to create a constant value of type 'Api.DataAccess.Contexts.MySp_Result'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

但我正在使用的所有属性都是一个字符串,所以我唯一可以假设的是sp返回的生成对象具有int?long?的原因这个错误?如果是这样我怎么能绕过这个?

由于

3 个答案:

答案 0 :(得分:1)

您无法加入SQL中的存储过程(linq生成SQL),而是使用用户定义的函数。

答案 1 :(得分:0)

你可以试试这个:

var test = (from obj1 in e.myTable
            from obj2 in e.MySp(aString) 
            where obj1.AStringProperty == obj2.AStringProperty
            select r.description).ToList();

答案 2 :(得分:0)

这在EF和SQL中都是不可能的。 Linq-to-entities查询被转换为SQL。您无法将SP中的结果集连接到任何其他查询。

唯一可行的方法是:

var test = (from obj1 in e.myTable.ToList()             
            join obj2 in e.MySp(aString) on obj1.AStringProperty equals obj2.AStringProperty             
            select r.description).ToList(); 

但它将作为Linq-To-Objects执行,因此myTable的全部内容将被转移到应用程序以及MySp的整个结果集,并且将在内存中执行连接。