Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带列表的LINQ查询与拆分数据库_C#_Database_Linq_Linq To Sql_Grouping - Fatal编程技术网

C# 带列表的LINQ查询与拆分数据库

C# 带列表的LINQ查询与拆分数据库,c#,database,linq,linq-to-sql,grouping,C#,Database,Linq,Linq To Sql,Grouping,又是我。几天前我问了一个问题,关于我目前正在从事的一个项目。想法很简单:我想让一个专家系统能够猜测用户正在思考的绘画,就像Akinator一样,但“只是”绘画。我的数据库中有3个表:Connaissance(知识)、Oeuvre(绘画)和Question(向用户提问)。一个接一个地问问题(是>ID回复=1/否>ID回复=2) 之前,我问过如何用LINQ语言表达我用SQL编写的查询,以获得最关键的问题: 事实上,我在这里试图确定最相关的问题。为了做到这一点,我计算了保留最多“是”的问题,并在我的数

又是我。几天前我问了一个问题,关于我目前正在从事的一个项目。想法很简单:我想让一个专家系统能够猜测用户正在思考的绘画,就像Akinator一样,但“只是”绘画。我的数据库中有3个表:Connaissance(知识)、Oeuvre(绘画)和Question(向用户提问)。一个接一个地问问题(是>ID回复=1/否>ID回复=2)

之前,我问过如何用LINQ语言表达我用SQL编写的查询,以获得最关键的问题: 事实上,我在这里试图确定最相关的问题。为了做到这一点,我计算了保留最多“是”的问题,并在我的数据库中通过了对每幅绘画的审查。这就是我在上一篇文章中写的查询所做的。但现在,问题变得更复杂了。对于第二个问题,我需要做同样的推理,而不考虑上一轮“淘汰”的绘画。这类绘画不会影响未来问题的确定,因为它们应该被删除(这与删除它们不同)。这就是为什么我不想查询整个数据库,而只是其中的一部分

我不得不接受以下想法:

  • 第一:在我的Connaissance表中添加一列,一个布尔值列,如果用户认为这幅画可能是(真/1)或不是(假/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
        }
List tab=新列表{1,3,5,9};
var r=直流连接中的c
哪里
c、 ID\u response==1&&c.ID\u Qu=
(来自康奈桑特区的公司)
哪里
选项卡包含(co.ID\U作品)&&
co.ID\U响应==1
选择新的
{
公司身份证问题
}
).Contains(新的{ID_Question=c.ID_Question})
c组由纽约
{
c、 我的问题是,
c、 ID_响应
}进入g
排序子句
g、 计数(p=>p.ID\u响应!=null)递减,
g、 关键问题
选择新的
{
g、 关键问题
}
有更简单的方法吗?我错了吗?
我真的不知道我能用SQL和LINQ langage做什么,所以提前谢谢你,我希望我不会再用这些来打扰你。。。最重要的是,我希望我足够清楚

我认为你需要后退一步。首先,用铅笔和纸,以“数学”为基础的形式写下你想要的工作方式,暂时忘掉数据库和表格。一旦你对数学有了清晰的理解,那么在C#/Linq和SQL中应用这个应该会容易得多。@bilpor我要:)我想你需要后退一步。首先,用铅笔和纸,以“数学”为基础的形式写下你想要的工作方式,暂时忘掉数据库和表格。一旦你对数学有了清晰的理解,那么在C#/Linq和或SQL中应用这个应该会容易得多。@bilpor我要:)