【问题标题】:Entity Framework: Select new attributes inside include实体框架:选择包含的新属性
【发布时间】:2017-11-15 17:06:59
【问题描述】:

假设我有一个名为 Solutions 的实体,它有多个多媒体。我想查询解决方案并检索他们的多媒体列表,但我也想只选择一些字段并从每个多媒体中推断出其他字段,如下所示:

IQueryable<Solution> result = db.Solutions
                .Include(s => s.Multimedia.Select(m => new MultimediaViewModel(){
                    ID = m.ID,
                    Name = m.Name,
                    Path = m.Path,
                    Preview = MultimediasController.ConvertVideo(m),
                    Extension = MultimediasController.GetExtension(m),
                    Type = m.Type
                }))

以下给出 System.ArgumentException 异常并显示消息:“Include 路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。”

这是如何实现的?

预期的反应是这样的:

[
    {
        "id": 2,
        "title": "Example",
        "subTitle": "Example 1",
        "multimedia": [
            {
                "id": 27,
                "name": "teste",
                "path": "/Upload_Public/Solution/27_.mp4",
                "preview": "/Upload_Public/Solution/27_preview.jpg",
                "extension": "mp4",
                "type": 0,
            }
        ],
    }
]

【问题讨论】:

    标签: c# asp.net entity-framework


    【解决方案1】:

    您不需要为此使用 .Include。只需创建一个匿名对象并选择所需的属性即可。

    IQueryable<Solution> result = db.Solutions
        .Select(s => new {
            s.Id,
            s.Title,
            s.Subtitle,
            Multimedia = new
            {
                s.Multimedia.ID,
                s.Multimedia.Name,
                s.Multimedia.Path,
                Preview = MultimediasController.ConvertVideo(m),
                Extension = MultimediasController.GetExtension(m),
                s.Multimedia.Type,
            }
        });
    

    但是,方法调用可能会导致运行时错误,因为需要在数据库中评估整个语句。我不确定这些方法的作用,但您可能必须带回原始数据,然后在数据到达客户端后提取所需的信息。

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-02-15
      • 1970-01-01
      相关资源
      最近更新 更多