繁体   English   中英

EF:将数据投影到类的子类中

[英]EF : Projecting data into a sub-class of a class

我正在尝试将一些数据投影到POCO列表中,其中POCO包含另一种类型的POCO的实例。

这两个类是Case和MyEntity,其中Case有一个名为Client的MyEntity实例。

public class Case
{
    public int ID { get; set; }
    public string CaseReference { get; set; }
    public bool Deleted { get; set; }
    public MyEntity Client { get; set; }
}

public class MyEntity
{
    public int ID { get; set; }
    public string Name { get; set; }
}

我试图像这样查询它,但它报告失败“无法创建MyEntity类型的常量值”:

 var result = (from c in context.cases
               where c.case_ref.Contains(caseReference)
               select new Case
               {                                      
                   ID = c.id,
                   CaseReference = c.case_ref,
                   Deleted = c.deleted,
                   Client = new MyEntity { ID = c.client.id, Name = c.client.name } 
               }).ToList();

这样做的最佳方式是什么,我是否必须将其分解为单独的查询?

实体框架的IQueryable实现在对象中创建新对象比在常规linq到对象( IEnumerable )中更加挑剔。 如果您首先通过ToList()将查询结果转换为IEnumerable

context.cases.Where(c => c.case_ref.Contains(caseReference).ToList()

然后,您可以按照自己的方式继续创建new Case对象。 (您可能需要在context.cases Include() Case.Client)。

继Gert的回答之后,我想我会在查询表达式语法中为有这个问题的其他人发布答案。

请注意,我必须添加一些检查来处理客户端表中没有数据:

var result = (from c2 in ((from c1 in context.cases
                           where c1.case_ref.Contains(caseReference)
                           select c1).ToList())
              select new Case
              {
                  ID = c2.id,
                  CaseReference = c2.case_ref,
                  Deleted = c2.deleted,
                  Client = (c2.client_id != null ? new MyEntity { ID = c2.client.ID, Name = c2.client.name } : null)
              }).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM