LINQ查询带有列表VS拆分数据库

时间:2017-02-22 08:31:57

标签: c# database linq linq-to-sql grouping

是的,我又来了。几天前我问过一个关于我目前正在工作的项目的问题。这个想法很简单:我想让专家系统能够猜出用户正在考虑的绘画,比如Akinator但是"只是"用于绘画。我的数据库中有3个表:Connaissance(知识),Oeuvre(绘画)和Question(向用户询问的问题)。问题是一个接一个地询问(是> ID响应= 1 /否> ID响应= 2)

以前,我问过如何在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语言做什么,所以提前感谢所有人,我希望我再次为所有这些而烦恼...最重要的是,我希望我很清楚!

0 个答案:

没有答案