【发布时间】:2012-03-13 07:34:26
【问题描述】:
var activecommcontacts =
CorporateCalendarDataContext.ActiveCommunicationContacts.Where(p=>systemUserMinistries.Contains(p.MinistryId)).Select(p => p);
var distinctcomm =
CorporateCalendarDataContext.ActiveDistinctCommunicationContacts.Select(r => r);
IQueryable<ActiveDistinctCommunicationContact> options
= (from orig in distinctcomm
let userid = orig.SystemUserId
let name = orig.Name
let nameandnumber = orig.NameAndNumber
from b in activecommcontacts
let actuserid = b.SystemUserId
where userid == actuserid
select new ActiveDistinctCommunicationContact
{
Name = name,
SystemUserId = userid,
NameAndNumber = nameandnumber
}).AsQueryable();
我收到带有消息的 SystemInvalidOperationException
“查询包含对在不同数据上下文中定义的项目的引用。”
我什至试图通过这种方式解决它:
IQueryable<ActiveDistinctCommunicationContact> options =
(from distinctcomm in CorporateCalendarDataContext.ActiveDistinctCommunicationContacts
from activecommcontacts in activecommcontacts
where activecommcontacts.SystemUserId == distinctcomm .SystemUserId
select new
{
distinctcomm .SystemUserId,
distinctcomm .Name,
distinctcomm.NameAndNumber
}).AsQueryable();
我收到带有消息的 SystemInvalidOperationException
“查询包含对在不同数据上下文中定义的项目的引用。”
我想指出 ActiveDistinctCommunicationContact 和 ActiveCommunicationContact 是同一数据上下文 CorporateCalendarDataContext 中的视图。
我什至在设计器中刷新了我的 DBML。
但我不断收到这个烦人的异常“查询包含对不同数据上下文中项目的引用”。我不明白为什么当视图属于相同的数据上下文时会发生这种情况。我在 stackoverflow.com 上解决了其中一些问题,但我无法让这个查询正常工作。你能帮忙吗?
public List<int> GetSystemUserMinistryList() {
var dc = new CorporateCalendar.Data.CorporateCalendarDataContext(); //"param1", "param2", "param3");
List<int> userMinistries = new List<int>();
var systemUserMinistries = dc.GetTable<CorporateCalendar.Data.ActiveSystemUserMinistry>();
foreach (CorporateCalendar.Data.ActiveSystemUserMinistry activeSystemUserMinistry in systemUserMinistries) {
if (activeSystemUserMinistry.SystemUserId == this.Id) {
userMinistries.Add(activeSystemUserMinistry.MinistryId);
}
}
return userMinistries;
}
private static CorporateCalendarDataContext CorporateCalendarDataContext {
get {
var dc = new CorporateCalendarDataContext(); //"param1", "param2", "param3");
return dc;
}
}
【问题讨论】:
-
第一:正确格式化您的问题。第二:异常意味着您持有从不同上下文实例中提取的对象,不一定是不同的内容类型。您是否持有超出上下文范围的对象?
-
我没有持有来自不同上下文实例的对象。我需要使用相同数据上下文的两个实例,因为每个实例都引用 DBML 中的不同视图。
-
systemUserMinistries 是在哪里定义的?那是使用其他上下文吗?如果是这样,我会理解这个错误。
-
私有静态 CorporateCalendarDataContext CorporateCalendarDataContext { get { var dc = new CorporateCalendarDataContext(); //"param1", "param2", "param3");返回直流; } }
-
我已经添加了您要求更多详细信息的其他方法。谢谢。
标签: .net linq linq-to-sql .net-4.0 linq-to-objects