我的问题是,我有三个表,文件,文档和图像,其中一个文件可以有很多文档,一个文档可以有很多图像。
所以我想要做的就是从一个文件中获取所有文档中的所有图像。我试过这样的事情:
var exp = context.Files.Include(x => x.Documents.Select(s => s.Images)).ToList();
var Doc = exp.Documents;
foreach(var docs in Doc)
{
listImg.Add(docs.Images);
}
但是,它无法正常工作,它说,无法转换为System.Collections.Generic.ICollection'到' Entities.Images'。
如何解决这个问题或以其他方式做到这一点?
答案 0 :(得分:1)
您正在寻找SelectMany
:
var listImg = context.Files
.SelectMany(f => f.Documents)
.SelectMany(d => d.Images)
.ToList();
至于例外:您将listImg
定义为List<Entities.Images>
,因此您必须向其添加Images
个对象,而不是ICollection<Images>
个对象。但是,如您所见,您不需要Add
方法,因为您可以在一个语句中创建列表。
顺便说一下,建议对类使用单数名称,即Image
而不是Images
。
答案 1 :(得分:0)
如果没有声明List本身的类,则无法直接将值添加到列表中。
您的代码
foreach(var docs in Doc)
{
listImg.Add(docs.Images);
}
更改为
假设您已经创建了此listImg
public class GetList
{
public int id {get;set;}
public Image thisImage{get;set;}
}
实施
List<GetList> listImg = new List<GetList>();
foreach(var docs in Doc)
{
GetList gl = new GetList();
gl.id = 1 // assuming an id to 1
gl.thisImage = docs.Images //if this is a true image
listImg.Add(gl);
}