我正在使用 EF 和 Linq 从数据库中返回值。我有一个Folder
结构,一个文件夹可以包含一个列表Folder
或Device
. 我想要的是能够构建位于Device
文件夹内(或下)的所有 s 的列表,包括属于该文件夹的任何文件夹(想象一下我想查看顶级目录中的所有文件,其中还包括子目录) .
这里真正的问题是可能有很多设备,所以我想要分页,所以理想情况下这一切都可以使用 LINQ 完成,这样我就可以在返回结果集之前对查询进行排序和分页。
这是我的设置的基本版本(为简单起见,删除了键、注释和其他内容)
public class Folder
{
public virtual ICollection<Folder> Children { get; set; }
public virtual ICollection<Device> Devices { get; set; }
}
// This is the function I currently have that only returns 1 folder
// needs to somehow be expanded to return devices for all folders beneath it too
function GetFolderDevices(int folderId, PaginationOptions options)
{
// Get all folders and devices
using (var dbObj = this.context.CreateDBContext())
{
EMDB.Models.Folder folder = dbObj
.AddressBook
.Include(a => a.Devices.Select(d => d.Settings))
.FirstOrDefault(f => f.FolderId == folderId);
// apply pagination here (already taken care of)
}
}