Asp.net 使用linq根据自引用表中的一个属性获取父对象
我有一个叫做quick的表格,上面有这些字段Asp.net 使用linq根据自引用表中的一个属性获取父对象,asp.net,sql,linq-to-sql,Asp.net,Sql,Linq To Sql,我有一个叫做quick的表格,上面有这些字段 id As Int created As DateTime header As Sring body As String fk_parent As int url As String 所有没有父项的项都将是问题,而具有父项的项将是答案。我无法获取所有最新的活动问题(基于问题创建时间和答案创建时间) 我正在努力编写一个可以完成上述任务的Linq查询。这里是一个开始: IQueryable<int> keys = from x in
id As Int
created As DateTime
header As Sring
body As String
fk_parent As int
url As String
所有没有父项的项都将是问题,而具有父项的项将是答案。我无法获取所有最新的活动问题(基于问题创建时间和答案创建时间)
我正在努力编写一个可以完成上述任务的Linq查询。这里是一个开始:
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();
IQueryable键=
从华盛顿的x开始。测验
让masterID=ParentId.HasValue?ParentId.Value:Id
x组由masterID转换为g组
按g.Max(x=>x.created)降序排列g
选择g键
List=dc.quick.Where(x=>keys.Take(20).Contains(x.Id)).ToList();
这假设答案不是答案的父母。。。如果可以-你手上有一个任意深度的树行走,这对于Linq和SQL来说是一个错误形状的钉子。你可以尝试在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
};
我想这就是您的表的设置方式,但我可能有连接错误。我认为这是正确的方法,我尝试将这两个命令合并为一个命令,如下所示:从dc中的x开始。quick let masterID=ParentId.HasValue?ParentId.Value:Id按masterID将x分组为g顺序g按g.Max(x=>x.created)降序选择(新{masterItem}=来自g中的x,其中x.parentid=null}问题是,我有返回值,答案和问题在不同的组中,一个问题的答案与问题不在同一组中。我知道它几乎是相同的,挖掘它。