【发布时间】:2013-08-20 16:44:22
【问题描述】:
我正在使用 EF 和 Linq 从数据库中返回值。我有一个Folder 结构,一个文件夹可以包含Folder 的列表或Device 的列表。我想要的是能够构建位于文件夹内(或下)的所有Devices 的列表,包括属于该文件夹的任何文件夹(想象我想查看顶级目录中的所有文件,其中还包括子目录)。
这里真正的问题是可能有很多设备,所以我想要分页,所以理想情况下这一切都可以使用 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)
}
}
【问题讨论】:
-
使用数据库上的公用表表达式准备视图并将其映射到 EF。
-
不确定你会怎么做?
-
何去何从?您可以像表格一样轻松地将 View 映射到 EF,但您必须记住,使用该映射可能无法插入/更新。
-
我不确定的是那个位(视图,映射它,它意味着什么?):)
-
我会为此使用递归函数 - 主要是因为它(在我看来)使代码更具可读性。据我所知,您可以这样做:stackoverflow.com/questions/11830174/…
标签: c# linq entity-framework lambda