【问题标题】:Get linked Object values in Linq C#在 Linq C# 中获取链接的对象值
【发布时间】:2020-11-07 21:28:51
【问题描述】:

我在下面有一个表格行。

表格 1:用户

用户 ID、电子邮件、.....

表 2:用户资料

ProfileId, UserId,ProfileName,....

FK in Users.UserId --> UserProfile.UserId

当我得到如下数据时..它只检索用户对象值。我还需要获取用户配置文件对象值。

 var returnObj = _context.Users.Where(x => x.UserId == userId).FirstOrDefault();
 var returnData = _entityMapper.Map<Users, UsersDTO>(returnObj);

【问题讨论】:

  • LINQ-to-sql 和 entity-framework 标签可能是互斥的;它们都是数据库访问技术,但您可能没有同时使用这两种技术。仅仅因为您正在编写使 EF 做某事的 LINQ 并不意味着您正在使用 LINQ to sql,例如......应该删除这些标签之一。实体框架现在可以引用具有不同功能集的两种不同技术。请让自己知道您正在使用哪个,如果它是核心,请用暗示 EF 核心的东西标记未来的问题。还请使用指示版本号的标签,因为版本之间的功能差异很大

标签: c# asp.net entity-framework linq linq-to-sql


【解决方案1】:

如下设计 User 和 UserProfile 类:

public class User
{

    public int Id { get; set; }
    public string Email { get; set; }
    public UserProfile UserProfile { get; set; }
}

public class UserProfile
{
    public int Id { get; set; }
    public string ProfileName { get; set; }
    public int UserId { get; set; }

    public User User { get; set; }
}

它们是一对一相关的实体,所以

    modelBuilder.Entity<User>()
            .HasOne(_ => _.UserProfile)
            .WithOne(_ => _.User);

最后,加载您的数据:

  var result = _context.Users.Include( _ => _.UserProfile).Select( _ =>  new
        {
            Email = _.Email,
            ProfileName = _.UserProfile.ProfileName,
        }
         ).ToList();

这是基于 EF Core

【讨论】:

    【解决方案2】:

    如果您使用的是 EF Core,请阅读 the documentation surrounding loading related data

    如果您使用的是 EF 6,请阅读 the documentation surrounding loading related data

    LINQ-to-SQL 现在真的很老了(它在 10 年前就死了)并且是一个已弃用的产品。如果您确实在使用它,请谷歌“LINQ to sql 加载相关数据”

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多