使用linq根据自引用表中的某个属性获取父对象

时间:2009-08-14 14:05:07

标签: asp.net sql linq-to-sql

我有一个名为Quiz的表,其中包含这些字段

id As Int
created As DateTime
header As Sring
body As String
fk_parent As int
url As String

所有没有父键的项目都是问题,拥有父键的项目就是答案。我有问题要获得所有最新的活动问题(基于问题创建时间和答案创建时间)。

我正在努力编写可以完成上述任务的Linq查询。

2 个答案:

答案 0 :(得分:0)

这是一个开始:

IQueryable<int> keys =
    from x in dc.Quiz
    let masterID = ParentId.HasValue ? ParentId.Value : Id
    group x by masterID into g
    order g by g.Max(x => x.created) descending
    select g.Key

List<Quiz> = dc.Quiz.Where(x => keys.Take(20).Contains(x.Id)).ToList();

这假设答案不是答案的父母......如果他们可以 - 你手上有任意深度树,这对于Linq和SQL来说都是错误的形状。

答案 1 :(得分:0)

您可以尝试在LINQ中加入表格并创建一个包含问题和答案的新对象:

var QandA = from q in tbl
        join a in tbl on q.id equals a.fk_parent
        select new {
        QHeader = q.header,
        QBody = q.body,
        QUrl = q.url,
        AHeader = a.header,
        ABody = a.body,
        AUrl = a.url
        };

我认为这就是你的表的设置方式,但我可能会错误地加入。