c# - 使用 EF Database First 的单表分层数据

标签 c# .net sql-server entity-framework entity-framework-4

我正在修改一些现有代码(使用现有数据库)以使用 Entity Framework Code First。我正在努力掌握的一个领域是一张拥有自己历史的 table 。项目按其原始 ID 分组(因此对项目的更新会创建一个新条目,具有相同的原始 ID),如下所示

- id = 1, originalid = 1 <-- oldest item in history

- id = 2, originalid = 1 <-- subsequent update

- id = 3, originalid = 1 <-- latest item

等等

每个项目也有一个用户 ID,我经常需要获取用户的所有数据,但是为了让我看到顶级(最新)项目,将它们的历史记录作为最新项目对象的属性,就像这样

id = 3 (because id 3 is that latest for the grouping with original id 1)
history { id = 1, id = 2 } (the other items with original id 1)

我现在正在绕过这个问题,查看最新的项目,加上一个存储过程来获取它的历史,但我觉得在数据库上一次点击就为用户获取所有内容会更有效,然后重新排列成代码中的分组。

但是我不知道怎么办。

请注意,我仅限于 .NET 4,因此无法利用 EF 5 中的某些功能。

有什么建议吗?

提前致谢。

最佳答案

在层次结构中只有两个级别,你可以简单地做一些像..

int 用户 ID = 1;

var query = items.Where(i => i.userid == userId).GroupBy(i => i.originalid).Select(i => new
                    {
                        LatestItem = i.OrderByDescending(x => x.id).First(),
                        History = i.OrderByDescending(x => x.id).Skip(1).Select(x => new
                        {
                            id = x.id,
                            originalid = x.originalid
                        }).ToList()
                    }).ToList();

您需要测试性能,但它应该会为您提供您所追求的结果。

关于c# - 使用 EF Database First 的单表分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21504342/

相关文章:

sql - T-SQL(MSSQL 2005)重新排序 Scope_identity

sql - EXEC 语句中的两个百分号

c# - 判断PipeStream是否有数据

c# - 如何删除应用于类属性的程序集?

c# - SendKey 不会输入某些字符

c# - MVC 中无法识别内容文件夹

c# - 文件中的变量(long、double...)存储方式是否错误?

sql - SQL 更新未抛出错误

c# - Entity Framework 在循环中插入存储过程

c# - 将sql查询结果映射到领域模型