[英]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.