我正在修改一些现有代码(使用现有数据库)以使用 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/