如何使用 EFCore 获取一个表的主键计数到另一个表

Posted

技术标签:

【中文标题】如何使用 EFCore 获取一个表的主键计数到另一个表【英文标题】:how to get the count of the primary key of one table to another table using EFCore 【发布时间】:2021-11-22 07:19:36 【问题描述】:

我必须表 A 表和 B 表 它通过外键通过 QuestionID 连接到表 A 见图片TableA and Table B

我根据图片上的表格进行查询

var tableBquestionIDs = await _dbContext.TableB.Select(q => 
                              q.QuestionID).toListAsync();

var tableAQuestionIDs = await _dbContext.TableA.Where(r => 
                           tableBquestionIDs.Contains(r.QuestionID))
                           .Select(r => r.QuestionID)
                          .ToListAsync();

这是一个考试程序,其中表 B 是考试的所有问题,表 A 是用户的答案。 每个问题都有两个选择 AnswerID,这就是为什么 QuestionId 在 TableA 的一个组中出现两次的原因。一旦用户回答了所有问题。这是 TableA.ID 1 到 TableA.ID 6。他完成了考试。现在允许用户重新参加考试。此 TableA.ID 7 到 TableA.ID 12 是重拍。我想要实现的是获得用户参加考试的次数。这就是为什么在这个例子中答案是 2。

有人可以帮助我如何在 EF Core 中完成此查询。 我非常需要你的帮助,因为我已经在这里待了好几天了 TIA。

【问题讨论】:

到目前为止你有什么代码?您的预期结果是什么? 我所拥有的只是可以从 TableA 和 TableB 中获取值的查询。结果,我期望 TableA 中的 TableB 的值计数为 A 组。就像图像上的示例一样,结果是 2 好的,请edit 并在您的问题中添加到目前为止的内容,因为 text 而不是图像 【参考方案1】:

您的问题有答案:使用分组。

 var query =
    from b in _dbContext.TableB
    join a in _dbContext.TableA on b.QuestionID equals a.QuestionID
    group b by a.QuestionID into g
    select new 
    
        QuestionID = g.Key,
        Count = g.Count()
    ;

【讨论】:

这是真实的场景。这是一个考试程序,其中表 B 是考试的所有问题,表 A 是用户的答案。每个问题都有两个选择,这就是为什么 QuestionId 在 TableA 的一个场景中出现两次的原因。一旦用户回答了所有问题。这是 TableA.ID 1 到 TableA.ID 6。他完成了考试。现在允许用户重新参加考试。这个 TableA.ID 7 go TableA.ID 12 是重拍。我想要实现的是用户参加了多少次考试。这就是为什么在这个例子中答案是 2。 所以,这个查询应该返回这个信息。只需按用户添加过滤器。 谢谢。我试过了,这个查询返回了 TableA 上每个 QuestionID 的计数。我需要将 TableB 中的所有值计数为 1,而不是单独计数。感谢您的努力。

以上是关于如何使用 EFCore 获取一个表的主键计数到另一个表的主要内容,如果未能解决你的问题,请参考以下文章

JPA映射:一个表的主键列到另一个表的非Pk/Fk列

如何获取 JDBC 中所有表的主键?

如何在 C# 中获取 Ms Access 表的主键

oracle 如何获取表的主键列名,如何获取表的所有列名

如何在 C# 中获取 DataGridView 中的主键?

如何从 JAVA 中的 ResultSet 或 ResultSetMetaData 对象中获取数据库表的主键的列名?