我正在尝试使用以下代码填充PersonRight对象中的Rights对象:
var results = (from P in this.ObjectContext.Person
join R in this.ObjectContext.Rights
on R.personid = p.personid
select new PersonRight(){
Name = P.Name,
}).AsQueryable();
public class PersonRight
{
public property Person { get; set; }
public List<Rights> Rights { get; set; }
}
我想用这个查询填充Rights对象,怎么做呢?我不能使用实体框架创建的实体,所以我需要将这些数据库对象填充到自定义类型中。
谢谢
答案 0 :(得分:1)
你可以试试这个:
var results = (from P in this.ObjectContext.Person
join R in this.ObjectContext.Rights
on P.personid equals R.personid
into PR
select new PersonRight()
{
Name = P.Name,
Rights = PR
}).AsQueryable();
public class PersonRight
{
public string Name { get; set; }
public IEnumerable<Rights> Rights { get; set; }
}
需要注意的一些事项:
equals
中使用join
,而不是==
。equals
的左侧必须为外部变量,因此on R.personid equals P.personid
错误。into
关键字为特定人员创建一组所有权利。变量PR
表示该人的所有权利的IEnumerable。Rights
课程中的PersonRight
为List<Rights>
,我不知道如何使其有效。在LINQ to Entities中无法使用PR.ToList()
,因为它会抱怨它无法将ToList()
转换为商店表达式。Person.Rights
)。如果您拥有它,则应在查询中使用它,不要使用join
。答案 1 :(得分:0)
var results = (from P in this.ObjectContext.Person
select new PersonRight()
{Person = P,
Rights = p.Rights.ToList() }).ToList();
OR
var results = (from P in this.ObjectContext.Person
select new PersonRight()
{Person = P,
Rights = this.ObjectContext.Rights.Where(r=>r.personid == p.personid ).ToList() }).ToList();
答案 2 :(得分:0)
一种可能的解决方案(可能不是很有效?)是简单地获取Persons
列表并在创建每个PersonRights
对象时获得相应的Rights
:
var results =
(from P in this.ObjectContext.Person
select new PersonRight
{
Name = P.Name,
Rights = (from R in this.ObjectContext.Rights where R.personid == P.personid select R).ToList()
}).AsQueryable();