【发布时间】:2013-03-14 18:02:20
【问题描述】:
这个项目快把我逼疯了 ;-) 我正在尝试做一个连接两个表的简单查询
我有以下几点:
存储库类方法
public IQueryable<ADPerson> FindAll(string UserId)
{
return (from p in db.ADPerson
select p);
}
在我的控制器中:
var ADPersonList = from o in ADPersonDB.FindAll(GetUserId())
join c in MSDNTypeDB.FindAll(GetUserId()) on o.MsdnTypeId equals c.MsdnTypeId
select new ADPerson()
{
AdPersonId = o.AdPersonId,
SamAccountName = o.SamAccountName,
Description = o.Description,
DisplayName = o.DisplayName,
UserPrincipalName = o.UserPrincipalName,
Enabled = o.Enabled,
LastUpdated = o.LastUpdated,
OnlineAssetTag = o.OnlineAssetTag,
MsdnTypeId = o.MsdnTypeId,
MsdnSubscription = c.MsdnTypeDescription,
};
我不断收到错误:
{"The specified LINQ expression contains references to queries that are associated with different contexts."}
我也尝试添加到存储库类:
存储库类方法
public IQueryable<ADPerson> FindAll(string UserId)
{
//return (from p in db.ADPerson
// select p);
var query = from o in db.ADPerson
join c in db.MsdnTypes on o.MsdnTypeId equals c.MsdnTypeId
select new ADPerson()
{
AdPersonId = o.AdPersonId,
SamAccountName = o.SamAccountName,
Description = o.Description,
DisplayName = o.DisplayName,
UserPrincipalName = o.UserPrincipalName,
Enabled = o.Enabled,
LastUpdated = o.LastUpdated,
OnlineAssetTag = o.OnlineAssetTag,
MsdnTypeId = o.MsdnTypeId,
MsdnSubscription = c.MsdnTypeDescription,
};
return query;
}
在实体框架中做两个表之间的简单连接并填充变量真的很难吗
谢谢
【问题讨论】:
-
使用第二种方法是不是同样的错误?
-
优点:没有第二个返回的错误是:无法在LINQ to Entities查询中构造实体或复杂类型'project.Models.ADPerson'。
-
RE:第二个错误。那是因为你不能 project 到一个映射的实体上。您可以将查询投影到匿名对象,然后将其映射到 ADPerson 实体
-
或者,您可以选择创建一个未映射的 DTO,投影到 那个,然后映射回 ADPerson 实体。
-
哦,所以返回 List 而不是 IQuerable?抱歉有点困惑,因为这两个表都映射到存储库类中。确定如何创建未映射的 DTO 并再次映射回来
标签: c# asp.net-mvc linq entity-framework asp.net-mvc-4