以前,我问过如何在LINQ语言中表达我用SQL编写的查询,以便提出最关键的问题:LINQ with subquery, group by and having count 事实上,我在这里尝试确定最相关的问题。要做这样的事情,我会计算出保留最多数量"是"的问题,通过检查我数据库中的每幅画。这是我在上一篇文章中写的查询的内容。但现在,问题有点复杂了。对于要问的第二个问题,我需要做同样的推理而不考虑绘画和#34;淘汰"上一轮。这些绘画不能影响对未来问题的确定,因为它们被认为是被删除的(这与删除它们不同)。这就是为什么我不想查询整个数据库,而只是查询其中的一部分。
我不得不提出想法:
1st:在我的Connaissance表中添加一个布尔值,如果绘画容易被用户想到的那个(true / 1)或者没有(false / 0),则放入它。我并不十分相信,即使它可能会起作用,即使它比在真实数据库的副本上工作更好。
第二名:在一份清单中列出被淘汰的画作,一圈又一圈,并在我的查询中询问不要考虑我名单中的画作。 我在SQL表单中尝试过类似的东西:
SELECT ID_Question
FROM Connaissance
WHERE ID_Reponse = 1 AND ID_Question NOT IN (SELECT ID_Question
FROM Connaissance
WHERE ID_Oeuvre IN (1,3,5,9) AND ID_Reponse = 1)
GROUP BY ID_Question
ORDER BY COUNT(ID_Reponse) DESC, ID_Question
我试着在这里找到最相关的问题的ID而不考虑绘画编号1,3,5,9其中答案是肯定的(1)我的数据库中的不同问题。 我甚至不相信我的查询是否是一个好的,我完全失去了相当诚实。我似乎给了我很好的身份证问题,但也许这只是一个机会问题。 即使查询很好,我也尝试将其写入LINQ,但它按照计划进行,并且无法正常工作:
List<int> tab = new List<int> {1, 3, 5, 9};
var r = from c in dc.Connaissance
where
c.ID_Reponse == 1 && c.ID_Qu !=
(from co in dc.Connaissance
where
tab.Contains(co.ID_Oeuvre) &&
co.ID_Reponse == 1
select new
{
co.ID_Question
}
).Contains(new { ID_Question = c.ID_Question })
group c by new
{
c.ID_Question,
c.ID_Reponse
} into g
orderby
g.Count(p => p.ID_Reponse != null) descending,
g.Key.ID_Question
select new
{
g.Key.ID_Question
}
有更简单的方法吗?我错了吗? 我真的不知道我能用SQL和LINQ语言做什么,所以提前感谢所有人,我希望我再次为所有这些而烦恼...最重要的是,我希望我很清楚!