我有一个帖子课:
class Post
{
public int ID;
public int? ParentID;
}
帖子类中答案和问题的唯一区别是问题的parend id等于null。
我想编写一个总是返回问题的查询,无论我传递给它的答案ID或答案ID都是答案 例如:
我有ID = 1并且不知道它是答案或问题的ID但是如果是问题ID我想从帖子类得到那个问题和答案
var selectquestionbyquestionid= from p in posts where p.ParentID==id || p.ID==id select p;
(it's query only for first variant)
但如果ID = 1是答案的ID并且想要得到该答案的问题以及该问题的所有答案
有可能吗?
更新(遵循Jon Skeet建议): Class Post看起来像这样:
class Post
{
public int ID;
public int QuestionID;
}
如果post是一个问题,它有QuestionID等于它自己的Id,但我仍然想写一个查询来做这个,我知道写两个更容易
答案 0 :(得分:1)
编辑:改为使用新的QuestionID字段,我怀疑这会起作用:
var query = from post in posts
where post.ID == id
join related in posts on post.QuestionID equals related.QuestionID
select related;
(您可能希望尝试颠倒联接的顺序,以查看它是否会影响生成的SQL的查询计划。)
(原始问题使用了可空的ParentID字段而不是QuestionID。)
你绝对有在一个查询中执行此操作吗?我相信它是可能的,但它可能比分裂它更加丑陋:
var post = posts.Where(p => p.ID == id)
.FirstOrDefault();
if (post == null)
{
// No such question - deal with it
}
int questonID = post.ParentID ?? post.ID;
var allPosts = posts.Where(p => p.ID == questionID || p.ParentID == questionID);
有一点需要注意:如果您可以将其从“ParentID”更改为“QuestionID”并使其不可为空,那么问题的拥有 ID作为QuestionID,则查询将变得有点简单。
如果确实希望在一个查询中执行此操作,可能能够执行此操作:
var query = from post in posts
where post.ID == id
let questionID = post.ParentID ?? post.ID
from related in posts
where related.ID == questionID || related.ParentID == questionID
select related;
我不知道LINQ to SQL会做什么。