【发布时间】:2012-02-17 15:13:55
【问题描述】:
我有一个返回表类型的存储过程。但是,具有存储过程的 EF 模型只返回当前的表类,而不返回关联的类。因此,当我遍历引用的(子/父)表时,这些引用的表值到处都是空值。
我知道这是预期的,因为存储过程仅返回该表(从该表中选择 *),但我现在想在调用存储过程后创建一个连接子句以访问其余引用的表我的 EF 模型。
这是我的代码,稍作修改以便于理解我需要什么...
var coll = db.SearchContacts(keyword,param1,param2)
//returns Contact types,works great
...现在我想做什么....(虽然我知道语法已关闭)
var ExtColl = coll join db.Address on coll.Address
join db.Department on coll.Department <- something similar
...这样我现在可以访问那个部门 (department.desc), 或此联系人的地址(address.civic)信息。
在我已经从数据库中的存储过程中收到这种格式之后,我不知道如何实现这种格式。
好的,这里是我正在做的更新...
var ps = from d in db.SearchContacts(param1,param2)
select d.Id;
var p = from e in db.Contacts
.Include("Table1Ref")
.Include("Table2Ref")
.Include("Table3Ref")
Where(BuildOrExpression<DBMOdel.Contact,long>(e=>e.Id,ps.ToList()))
select e;
现在我得到了我想要的回报,除了一件事...... 有些表引用了进一步引用的表 我想添加,并且 Include 不允许 我直接将它们添加到联系人中,因为这些表不是 引用联系人但另一个引用联系人的表 一层/级别进一步...所以联系人参考地址 和地址参考省... 我需要访问省份信息(例如描述) 但需要正确完成我的加入语句....
所以我正在考虑使用 join 语句,但不知道这种分配或连接的语法...... 联系人 -> AdressId 上的地址,地址 -> ProvinceId 上的省份
所以我认为我的 linq 语句看起来像这样......
var p = from e in db.Contacts
.Include("Table1Ref")
.Include("Table2Ref")
.Include("Table3Ref")
Where(BuildOrExpression<DBMOdel.Contact,long>(e=>e.Id,ps.ToList()))
-> join o in db.Province on o.ProvinceId equals e.Address.ProvinceId
select e;
但没有达到预期的效果...有人可以帮忙吗? 我想我可能还会将 linq 与 sql 或对象与 linq 与实体混合... 这是我得到的错误
“调用 'Join' 方法的键选择器类型在底层存储提供程序中不可比较。”
【问题讨论】:
标签: c# .net linq stored-procedures linq-to-entities