簡體   English   中英

實體框架:在包含的內部選擇新屬性

[英]Entity Framework: Select new attributes inside include

假設,我有一個名為“解決方案”的實體,該實體具有多個多媒體。 我想查詢解決方案並檢索其多媒體列表,但我也想僅選擇一些字段,並從每個多媒體中推斷其他字段,例如:

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異常提供了消息:“包含路徑表達式必須引用在類型上定義的導航屬性。對於引用導航屬性使用點划線路徑,對於集合導航屬性使用選擇運算符。”

這是如何實現的?

預期的響應將是這樣的:

[
    {
        "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,
            }
        ],
    }
]

您無需為此使用.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,
        }
    });

但是,方法調用可能會導致運行時錯誤,因為需要在數據庫中評估整個語句。 我不確定這些方法的作用,但是您可能必須帶回原始數據,然后在數據位於客戶端上后提取所需的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM