我有这个LINQ查询,它在两个数据库(oContext
和oCommonContext
)之间执行联接:
Logs = from h in oContext.TbHistoryLog
join o in oCommonContext.TbObjects on h.FormName equals o.ObjectRealName
join u in oCommonContext.TbUsers on h.UserId equals u.UserId
where userIds.Contains((Guid)h.UserId) && formNames.Contains(o.ObjectRealName)
&& h.DateUpdated > fromDate && h.DateUpdated < toDate
orderby h.DateUpdated
select new HistoryLog
{
Id = h.Id,
ObjectId = h.ObjectId,
UserName = Helper.CurrLang == Helper.SystemLanguage.Arabic ? u.UserAName : u.UserEName,
UserCode = u.UserCode,
DateUpdated = h.DateUpdated,
ObjectCode = h.ObjectCode,
FormName = h.FormName,
ObjectName = Helper.CurrLang == Helper.SystemLanguage.Arabic ? o.ObjectAName : o.ObjectEName,
State = h.State
};
return Logs.ToList();
但是当我运行它时,它会引发错误:
指定的LINQ表达式包含对以下查询的引用: 与不同的上下文相关联。
我知道不允许在一个查询中引用两个数据库,
我尝试过这种解决方法:
var histories = oContext.TbHistoryLog.ToList();
Logs = from h in histories.AsQueryable()
join o in oCommonContext.TbObjects on h.FormName equals o.ObjectRealName
join u in oCommonContext.TbUsers on h.UserId equals u.UserId
where userIds.Contains((Guid)h.UserId) && formNames.Contains(o.ObjectRealName)
&& h.DateUpdated > fromDate && h.DateUpdated < toDate
orderby h.DateUpdated
select new HistoryLog
{
Id = h.Id,
ObjectId = h.ObjectId,
UserName = Helper.CurrLang == Helper.SystemLanguage.Arabic ? u.UserAName : u.UserEName,
UserCode = u.UserCode,
DateUpdated = h.DateUpdated,
ObjectCode = h.ObjectCode,
FormName = h.FormName,
ObjectName = Helper.CurrLang == Helper.SystemLanguage.Arabic ? o.ObjectAName : o.ObjectEName,
State = h.State
};
return Logs.ToList();
并引发另一个异常:
此方法支持LINQ to Entities基础结构,但不支持 旨在直接从您的代码中使用。
当前看来,我在代码中没有选择,并且我认为最好在SQL中创建视图,但是问题在于数据库名称是未知的,并且它们根据客户端首选项而有所不同,因此,如果我创建了视图在第一个数据库中,我不知道第二个数据库的名称,反之亦然。