如何将具有实体框架的外键对象转换为自定义对象?

时间:2015-10-28 16:35:08

标签: c# entity-framework lambda entity-framework-5

我正在尝试使用entity framework 5.0从数据库中进行选择。

我有一个名为Persons的表格,由PersonsImages引用,因此基本上Persons的一条记录可以有多个PersonsImages

我已经制作了一个给人员的select语句,但我也希望将PersonsImages作为List<PersonsImages>,并将它们放在一个自定义对象中。

这是我到目前为止的代码:

var person = new Persons();

using (var context = new PersonEntities())
{
    person = context.Persons.Where(x => x.personId == 555)
                            .Select(xxx => new Persons
                            {
                                personName = xxx.personName,
                                personLastName = xxx.personLastName,
                                PersonImages = xxx.PersonsImages // there's an error here
                            })
                            .FirstOrDefault();
}

PersonsPersonsImages类看起来像那样(它们是实体框架生成的类的副本):

public partial class Persons
{
        public Persons()
        {
            this.PersonsImages = new HashSet<PersonsImages>();
        }

        public string personName { get; set; }
        public string personLastName { get; set; }
        public virtual ICollection<PersonsImages> PersonsImages { get; set; }
}

public partial class PersonsImages
{
        public string imageName { get; set; }
        public byte[] image { get; set; }
        public virtual Persons Persons { get; set; }
}

我知道我可以进行第二次选择并“手动”找到它们,但是不能一次性完成它,就像entity framework通常做的一样吗?

1 个答案:

答案 0 :(得分:1)

假设您的错误是“无法在LINQ to Entities查询中构造对象” - 项目为匿名类型,请调用ToArray()方法枚举结果,然后投影到{{1的新实例}}:

Persons