【问题标题】:Possible LINQ query, Entity Framework Core可能的 LINQ 查询,Entity Framework Core
【发布时间】:2017-05-18 21:14:05
【问题描述】:

我有两个主表 Task 和 Person。还有一个名为Assign 的链接表。

一个任务可以有许多通过分配表链接的人员记录。

我有一个运行良好的创建表单,它带有一个多选列表,我可以在其中为任何会话一次将多个人添加到分配表中。

我希望根据任务 ID(通过创建请求 URL 字符串传递)过滤我的选择列表的值,以不包括“分配”表中已存在的“人员表”中的记录。

    public IActionResult Create(int task)
    {
    ViewData["PersonId"] = new SelectList(_context.Person, "PersonId", "PersonName");
    ViewData["TaskId"] = new SelectList(_context.Task, "TaskId", "TaskName", task);


    return View();

    }

【问题讨论】:

  • 你能发布 Person、Task 和 Assign 的模型吗?

标签: entity-framework-core asp.net-core-mvc


【解决方案1】:

编辑

ViewData["PersonId"] = new SelectList(_context.Person.Where(a=>a.Assign.Any(b=>b.TaskId == task), "PersonId", "PersonName");

【讨论】:

  • 谢谢你,它没有解决它,但确实让我思考。您的解决方案的问题是 a=>a.Assign 不包含对 TaskId 的引用,这很奇怪(因为我认为确实如此)
  • 如果你还需要这个ViewData["PersonId"] = new SelectList(_context.Person.Where(a=>a.Assign.Any(b=>b.TaskId == task), "PersonId", "PersonName");
【解决方案2】:

我通过为我要删除的所有项目创建一个新的 VAR 来解决这个问题,然后对它们进行查询:

var query = from a in _context.Assign.where (a.Task == task) select a.PersonId;

        ViewData["PersonId"] = new SelectList(_context.Person.Where(x => !query.Contains(x.PersonId)).ToList(), "PersonId", "Fullname");

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2022-01-25
    • 2020-09-11
    • 1970-01-01
    • 2020-12-09
    • 2023-03-23
    相关资源
    最近更新 更多