【问题标题】:Return data from linked table从链接表返回数据
【发布时间】:2020-09-04 00:33:03
【问题描述】:

我有 3 张桌子

表 1 = 用户表

表 2 = 员工表

表 3 = userStaff 表

userStaff 表是连接用户表和员工表的联接表。

user Table
 
id | firstName  | password
---------------------------
2  | UserOne    | hashed



staff Table

id | firstName  | lastName
---------------------------
3  | sally      | jones


userStaff Table

userID | staffID
---------------------------
2      | 3

我创建了一个输入用户 ID 的方法,它应该返回与链接到用户 ID 的人员 ID 对应的人员表。在这种情况下,我想插入用户 id 2 并取回员工 id 3 的信息,因此收到返回“id = 3, firstName = Sally, lastName = jones”。

这是我尝试使用的代码

public async Task<UserStaff> GetUserLinkStaff(int id)
{
    var staff = await _context.UserStaffs
    .FirstOrDefaultAsync(u => u.UserId == id)
    .Include(s => s.staffs);

    return staff;
}

但是,我收到一条错误消息,上面写着“任务”不包含“包含”的定义,并且找不到接受“任务”类型的第一个参数的可访问扩展方法“包含”(您是否缺少使用指令还是程序集引用?)[Schedular.API]csharp(CS1061)"

我应该使用什么正确的 LINQ 查询?

【问题讨论】:

  • 看看类型! FirstOrDefaultAsync 返回一个没有 Include 扩展方法的 Task&lt;UserStaff&gt;IncludeIQueryable&lt;T&gt; 的扩展方法。当然,您可以为Task&lt;T&gt; 定义一个包含方法,但实现它的运气并不好。 Include 修改了查询,但您试图在没有意义的查询结果上使用它。

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


【解决方案1】:

我应该使用什么正确的 LINQ 查询?

要解决它,只需将代码更改如下:

var staff = await _context.UserStuffs.Include(o => o.Stuff)
                  .FirstOrDefaultAsync(u => u.UserId == id);

使用Include获取关联数据时,应DbSet之后先执行Include操作,然后返回关联数据集合获取具体数据在Include之后通过FirstOrDefaultAsync方法

我建议你阅读this article以了解Include在ef core中的用法。

这是测试结果:

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2015-03-14
    • 2012-12-24
    • 2022-01-12
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多