【问题标题】:Retrieving a column based on FK - three tables基于FK检索一列——三个表
【发布时间】:2022-01-18 07:25:44
【问题描述】:

这里是新手 C#/.Net 编码器。我正在尝试创建一个显示来自三个不同表的列的视图。使用外键检索其中一列。

CategoryDe​​tailViewModel 包含一个服务列表和一个提供者列表。 Services 表包含一个 ProviderId 和一个 CategoryId。 我能够检索与类别相关的服务名称。 我的问题是如何检索提供者名称? 我的 CategoriesController 看起来像这样,没有表示我缺乏知识的问号。 我需要另一个连接或子查询来完成这项工作 - 只是不知道如何在 Linq 中完成它。 :'(

    public IActionResult Detail(int id)
    {

        Category theCategory = context.Categories
            .Include(c => c.Services)
            .Include(c => c.Providers)
            .Single(c => c.Id == id)
            .Single(c => c.Services.ProviderId == );



        CategoryDetailViewModel viewModel = new CategoryDetailViewModel(theCategory);
        return View(viewModel);     
    }

【问题讨论】:

  • 为什么是两个Single?它是如何编译的?
  • 我有没有提到我是 C#/.Net 和 Linq 的新手? ;^) 它还没有编译,因为我正在努力编写这个查询。

标签: c# mysql .net linq


【解决方案1】:

我会给你一个Join的例子,然后把你的例子与之匹配

var p = context.Categories
          .Join(context.Services,
               left => left.Id,
               right => right.CategoryID,
               (left,right) => new { categories = left, services = right })
          .Join(context.Providers,
               left => left.services.Id,
               right => right.ProviderId,
               (left,right) => new { categories = left.categories, services = left.services , providers = right})
          .Where(c => c.services.ProviderId == id);
               

【讨论】:

  • 谢谢@Meysam Asadi,我会尝试这个指导。 :)
  • 差不多。我在服务和服务上遇到错误。 CS1061 - “匿名类型类别类别、服务服务、提供商提供者”不包含“服务”的定义,并且没有可访问的扩展方法“名称”接受“匿名类型类别类别、服务服务、提供商提供者”类型的第一个参数找到(您是否缺少 using 指令或程序集引用?)。将尝试添加屏幕截图。有什么建议吗?
  • 是否可以输入你的表结构或相关类?
猜你喜欢
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2023-01-02
  • 2022-11-10
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多