gpt4 book ai didi

c# - 选择问题中用户的所有标签 asp.net c# EF

转载 作者:行者123 更新时间:2023-11-30 22:16:02 24 4
gpt4 key购买 nike

有四个表:

问题(questionId,问题)
QuestionTags(questionTagId, questionId, tagId)
CodingKeys(codingKeyId, codingTypeId ..)
编码(codingId, codingKeyId, coding ..)

我想选择在问题中表示的所有问题 tagId 及其编码(codingKeyId 是 tagId 的外键)...因此,如果我在 Codings 表中有 10 个不同的编码,但在我想要的问题中只表示其中两个仅选择这两个。

我试过这样加入:

var query = from qt in context.QuestionTags
join c in context.Codings on qt.tagId equals c.codingKeyId
select new
{
tagId = qt.tagId,
coding = c.coding
};

但是上面的解决方案给了我双重结果。例如,如果一个标签包含在多个问题中,我会得到相同的标签两次(我尝试了不同的,但没有用)。

我也试过使用 Any:

var query= context.QuestionTags
.Where(qt => qt.Questions.QuestionTags.Any(q => q.tagId == qt.tagId))
.Select(qt => new
{
codingKeyId = qt.questionId,
coding = context.Codings.FirstOrDefault(c => c.CodingKeys.codingKeyId == qt.tagId).coding
});

这里发生了同样的事情,我得到了重复的结果,但是 Distinct 没有工作(不知道为什么)。

但是,如果我使用这个 SQL 语句:

SELECT distinct tagId, coding 
FROM QuestionTags
LEFT OUTER JOIN Codings ON codingKeyId LIKE QuestionTags.tagId
WHERE Codings.languageId = 1

我得到了正确的结果,但我不想为此编写和存储过程。我真的不想知道我是否可以使用 EF (linq) 解决这个问题,而且我也不确定 distinct 是否是正确的解决方案。

感谢您的帮助。

最佳答案

您可以使用分组依据来获得您想要的结果。
var query = from qt in context.QuestionTags
在context.Codings中加入c.qt.tagId等于c.codingKeyId
通过新的{tagId = qt.tagId,coding = c.coding }将qt分组到元素中
选择新的
{
tagId = element.Key.tagId,
coding = element.Key.coding
};

如果觉得有用请采纳为答案

关于c# - 选择问题中用户的所有标签 asp.net c# EF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17669768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com