如何从第3张表中检索数据?

时间:2017-12-11 23:09:23

标签: c# entity-framework-6

我的问题是,我有三个表,文件,文档和图像,其中一个文件可以有很多文档,一个文档可以有很多图像。

所以我想要做的就是从一个文件中获取所有文档中的所有图像。我试过这样的事情:

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'。

如何解决这个问题或以其他方式做到这一点?

2 个答案:

答案 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);
     }