让我们说,我有一个名为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异常:&#34; Include路径表达式必须引用在该类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。&#34;
这是如何实现的?
预期的反应将是这样的:
[
{
"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,
}
],
}
]
答案 0 :(得分: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,
}
});
但是,方法调用可能会导致运行时错误,因为需要在数据库中评估整个语句。我不确定这些方法是做什么的,但您可能必须恢复原始数据,然后在客户端上提供数据后提取所需的信息。