RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1566551
Accepted
Ildar
Ildar
Asked:2024-02-16 16:42:38 +0000 UTC2024-02-16 16:42:38 +0000 UTC 2024-02-16 16:42:38 +0000 UTC

在方法中返回 EF Core 数据

  • 772

我想我正在用方轮重新发明轮子(也许有一个更优雅的解决方案)。我需要该方法来返回已跨多个表组合的所有对象的列表:

  public List<Address> GetAddress()
    {
        using (var db = new CrmDbContext())
        {
            var address = from a in db.Addresses
                          join City in db.Cities on a.CityId equals City.CityId
                          join Area in db.Areas on a.AreaId equals Area.AreaId
                          select a;
  
            List<Address> result = address.ToList();
            return result;
        }
    }

如果我这样输出:

foreach(var address in addressModel.GetAddress())
 {
     WriteLine(address.City.CityName);
 }

然后 Exxeption 对我来说崩溃了

System.NullReferenceException:“未将对象引用设置为对象的实例。”

我这样做很可能是徒劳的。但我想在一个单独的类中存储一个用于显示对象(例如地址)的方法,并通过该方法显示它。

entity-framework-core
  • 2 2 个回答
  • 35 Views

2 个回答

  • Voted
  1. Best Answer
    Faraday
    2024-02-16T17:08:57Z2024-02-16T17:08:57Z

    你为什么不想使用这些方法Linq?例如,假设您有一张桌子UserEntity:

    public int Id { get; set; }
    public string Login { get; set; }
    

    还有电话表PhoneEntity:

    public int Id { get; set; }
    public string Phone { get; set; }
    

    让我们把它们连接起来один-ко-многим。UserEntity:

    public int Id { get; set; }
    public string Login { get; set; }
    
    public ICollection<PhoneEntity> Phones { get; set; }
    

    还有手机本身PhoneEntity:

    public int Id { get; set; }
    public string Phone { get; set; }
    
    public int UserId { get; set; }
    public UserEntity User { get; set; }
    

    现在我怎样才能把它全部拿出来并将其链接到UserEntity他的所有手机PhoneEntity:

    var users = _dbContext.Users.Include(user => user.Phones).ToList();
    

    这里我们使用.Include(),与使用类似LEFT JOIN

    接下来,假设您的手机上仍然附加了一本通讯录(PhoneEntity-> ContactEntityhow one-to-many),那么将其组合在一起的请求将如下所示:

    var users = _dbContext.Users
        .Include(user => user.Phones)
            .ThenInclude(phone => phone.Contacts)
        .ToList();
    

    接下来,作为示例,我们可以更改 UserEntity,如下所示:

    public int Id { get; set; }
    public string Login { get; set; }
    
    public ICollection<PhoneEntity> Phones { get; set; }
    public ICollection<DocumentEntity> Documents { get; set; }
    

    我们如何将所有数据整合在一起?像这样:

    var users = _dbContext.Users
        .Include(user => user.Phones)
            .ThenInclude(phone => phone.Contacts)
        .Include(user => user.Documents)
        .ToList();
    

    进一步来说,凡事都是类推。这对于你想要的东西来说是一个很好的类比。

    PS:我没有直接回答你的问题,只是提供信息,以便你理解这些概念,并能够学习这些材料并自己解决问题

    UPD:如果您想进行获取,请使用该方法.Where(),这是最后一个代码示例的用法示例:

    var users = _dbContext.Users
        .Where(user => user.Id > 100)
        .Include(user => user.Phones)
            .ThenInclude(phone => phone.Contacts)
            .Where(phone => phone.Phone != "1234567890")
        .Include(user => user.Documents)
    
        .ToList();
    
    • 2
  2. CrazyElf
    2024-02-16T17:26:00Z2024-02-16T17:26:00Z

    Linq默认情况下,它执行“惰性”选择,不包括结果中相关表中的值。您需要明确指定哪些选择字段指向您想要使用Include. 例如,如另一个答案中通过“对象”样式和“点”表示法给出的那样。

    但是,据我从英语 SO 的答案中了解到,Include您可以将它与您的sql-style 查询一起使用。这应该有效:

    var address = (from a in db.Addresses
                  join City in db.Cities on a.CityId equals City.CityId
                  join Area in db.Areas on a.AreaId equals Area.AreaId
                  select a).Include("City");
                           ^^^^^^^^^^^^^^^^ загружаем в поле связанные значения
    
    
    • 1

相关问题

  • 如何对模型(包括链接模型)的所有字段实现过滤 ASP.NET Web API EF

  • EF 核心。分层数据。不创建表

  • ASP.NET 核心 MVC。实现 IDataProtectionKeyContext 接口

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5