我使用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?
的原因这个错误?如果是这样我怎么能绕过这个?
由于
答案 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的整个结果集,并且将在内存中执行连接。