我试图将两个阵列与他们的关系结合起来,但不能做得很好.我的数据库和帖子表中有一个帖子表,有问题和答案记录.答案与"relatedPostId"栏中的问题有关.例如:
Posts (Table)
-------------
int Id (Field)
string Text (Field)
int RelatedPostId (Field)
question(record) : relatedPostId column is null
answer(record) : relatedPostId column is the value of question id
Run Code Online (Sandbox Code Playgroud)
我的代码如下
var posts = DBConnection.GetComments(_post.TopicId).ToArray().OrderByDescending(p => p.CreateDate);
var questions = posts.Where(p => p.RelatedPostId == null);
var answers = posts.Where(p => p.RelatedPostId != null);
var result = from q in questions
join a in answers
on q.Id equals a.RelatedPostId
select new { q = q, a = a };
Run Code Online (Sandbox Code Playgroud)
我想列出ListBox上的帖子(lstCurrentTopic.Items.AddRange(...))另外我想在每个问题的末尾显示答案,如
Question1
-> Answer1 (relatedPostId is Qustion1.Id)
-> Answer2 (relatedPostId is Qustion1.Id)
Qestion2
->Answer3 (relatedPostId is Qustion2.Id)
->Anser4 (relatedPostId is Qustion2.Id)
Run Code Online (Sandbox Code Playgroud)
如何将此订单添加到列表框中
这样的事情应该有效:
var result = from q in questions
select new {
q,
answers =
from a in answers
where q.Id == a.RelatedPostId
select a;
}
Run Code Online (Sandbox Code Playgroud)
上述方法适用于LINQ to Entities之类的东西,它可以转换为数据库可以优化的SQL语句.由于您正在使用LINQ到对象,因此如果您利用数据结构,您将获得更好的性能:
var answersByQuestionId = answers.ToLookup(a => a.RelatedPostId);
var result = from q in questions
select new {
q,
answers = answersByQuestionId.Contains(q.Id)
? answersByQuestionId[q.Id].AsEnumerable()
: Enumerable.Empty<Answer>()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11251 次 |
| 最近记录: |