首页 > 解决方案 > 我无法填充在 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,然后获取每个问题的标签。

标签: asp.net-mvcdatabaselinqasp.net-core-2.0

解决方案


使用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();

我希望它有所帮助。


推荐阅读