【问题标题】:Retrieve data from child table using parent table LINQ query使用父表 LINQ 查询从子表中检索数据
【发布时间】:2021-01-05 16:52:08
【问题描述】:

我需要从子表中检索数据。父表与子表是一对多的关系。

父表 = taskSchedule

子表 = 笔记

笔记模型

public class Note
{
    public int Id { get; set; }
    public string NotesInfo { get; set; }
    public DateTime dateCreated {get; set;}
    public TaskSchedule taskSchedule {get; set;}
    public User user { get; set; }
    public int userId { get; set; } 
}

任务调度模型

public class TaskSchedule
{
    public int Id { get; set; }
    public string Title { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public User user { get; set; }
    public int userId { get; set; }     
}

我需要能够返回与特定任务相关的所有笔记。此外,我只需要返回与特定用户相关的任务。

当前代码返回与特定用户相关的任务。

       public async Task<IList<TaskSchedule>> GetTaskSchedulesByUser(int UserId)
    {
        var userTaskSchedule = await _context.TaskSchedules
            .Where(u => u.userId == UserId)
            .ToListAsync();                                   

        return userTaskSchedule;            
    }

我还需要能够返回与这些任务相关的笔记。

【问题讨论】:

    标签: c# linq asp.net-core join inner-join


    【解决方案1】:

    一个简单的内部连接是否适合您的需求? (未经测试,但这是 LINQ 内部连接背后的一般思想)

    var userTaskSchedule = await _context.TaskSchedules
    .Join(_context.Notes, schedule => schedule.Id, note => note.Id, (schedule, note) => new { schedule, note })
    .Where(u => u.schedule.userId == UserId)
    .ToListAsync();  
    

    【讨论】:

    • 是的,内部联接似乎是可行的方法,但是,我正在努力使内部联接发挥作用。
    • 如果你实现上面的例子,你的结果是什么?内连接只会显示每个表中都有记录的行
    • 我最终使用了 .include 语句 var userTaskSchedule = await _context.TaskSchedules .Include(ts => ts.Notes) .Where(u => u.userId == UserId) .ToListAsync() ;我被告知在使用实体框架时不要使用连接,因为它会自动创建连接。
    • 好电话,我将建议尝试 .Include next 因为这是自动加入表格的方式,前提是您已配置密钥。在您没有定义任何关系的情况下,.Join 语法会起作用。很高兴你把它整理好了。