asp.net-mvc - 我无法填充在 asp.net 核心视图中具有多对多关系的标签数据
问题描述
我有 QuestionSkill 与 UserQuestion 和 SkillTag 的多对多关系,所有技能名称都保存在 SkillTag 表中,其他问题详细信息保存在 UserQuestion 表中,外键放在 QuestionSkill 中,我应该从中获取相关标签。 这是我的数据库架构
我也在使用分页,这就是为什么我有一些有限的方法来做到这一点。这是我的控制器功能
public async Task<IActionResult> Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewData["CurrentSort"] = sortOrder;
ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date";
ViewData["CurrentFilter"] = searchString;
//Check User Profile is complete or not
var user = await _userManager.GetCurrentUser(HttpContext);
var userPersonalRow = _context.UserPersonalDetail.Where(a => a.UserId == user.Id).SingleOrDefault();
var questions = from q in _context.UserQuestion.OrderByDescending(x => x.UserQuestionId) select q;
foreach (var qi in questions)
{
var qid = qi.UserQuestionId;
var skillTag = _context.SkillTag.Select(g => g.SkillTagId);
foreach (var skill in skillTag)
{
var questionSkill = _context.QuestionSkill.Where(f => f.UserQuestionId.Equals(qid) && f.SkillTagId.Equals(skill)).Select(s => s.SkillTag.SkillName);
TempData["myData"] = questionSkill;
}
}
这是我的观点的一部分,它没有像它应该的那样工作:
<div class="col-xs-9">
<h3 class="font-size16 margin-bottom6"><a href="/Question/QuestionDetail/@question.UserQuestionId">@question.Title</a></h3>
<span class="widget-tags-sm">
@{
<a> @TempData["myData"]</a>
}
</span>
<p class="inline small-font margintop6 float-right"><i class="fa fa-clock-o"></i> @question.PostTime <a><i class="fa fa-user"></i></a></p>
</div>
我也尝试过 ViewData 来发送标签,但是。我认为我获取标签的方法是错误的,即分别从 UserQuestion 表和 SkillTag 表中获取问题 ID 和 SkillId,然后在 QuestionSkill 表中匹配它们的 ID,然后获取每个问题的标签。
解决方案
使用Foreach
从数据库中检索数据不是一个好习惯,您可以在这种情况下使用 Join,请参阅下面的示例代码以在 LINQ 中进行连接。
var Question = (from a in _context.SkillTag
Join b in _context.UserQuestion on a.YourRefferedColumn=b.YourRefferedColumn
Join c in _context.QuestionSkill on b.YourRefferedColumn=c.YourRefferedColumn
where a.SkillColomnn=="Your skill" //In this put the condition
select new
{
c.skillColumn
}).First();
我希望它有所帮助。
推荐阅读
- sql - 使用聚集索引的内部连接约束(需要空值)
- spring-kafka - 多个消费者使用 spring kafka 并在 spring 之外编写回复主题
- azure - DataFactory 将字符串(年份为 2 位)转换为日期
- .net - 未能将路线匹配到正确的操作
- reactjs - 发布带有反应应用程序到 IIS 的 .net core 3.1
- css - 与 figma 相比,字体提供不同的输出
- pip - Jupyter Notebook - ImportError: lxml not found, please install it
- amazon-web-services - 执行查询时 Athena 权限被拒绝
- javascript - 如何等待一组 promise 完成执行,然后将每个 promise 返回的值存储在状态数组中?
- google-cloud-run - Google Cloud Run(完全托管):无法自定义域映射