gpt4 book ai didi

c# - 如何使用 LINQ SQL 连接根据 ID 连接 3 个表? C# MVC(.NET Core 2.0)

转载 作者:行者123 更新时间:2023-11-29 10:32:41 24 4
gpt4 key购买 nike

我有 3 个表/实体,名为 Person、PersonPhone 和 EmailAddress。所有表 ID 使用相同的 ID,称为 BusinessEntityID。 “BusinessEntity”也是一个表。

我创建了一个 ViewModel 来传递给我的 View ,它将显示一些数据:

@model CoreTutorials1.ViewModels.PersonIndexViewModel

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>@Model.Person.FirstName @Model.Person.LastName</title>
</head>
<body>
<dl>
<dt><b>First Name: </b></dt>
<dd>@Model.Person.FirstName</dd>
</dl>
<dl>
<dt><b>Last Name: </b></dt>
<dd>@Model.Person.LastName</dd>
</dl>
<dl>
<dt><b>Phone: </b></dt>
<dd>@Model.PersonPhone.PhoneNumber</dd>
</dl>
<dl>
<dt><b>Email Address: </b></dt>
<dd>@Model.EmailAddress.EmailAddress1</dd>
</dl>
</body>
</html>

在我的 Controller 中,我已经尝试执行以下操作(有点):

// GET: /<controller>/
public IActionResult Index()
{
// will grab the first Person from our DbSet from our db
//var person = db.Person.FirstOrDefault();
var person = db.Person.Where(x => x.BusinessEntityId == 1).FirstOrDefault();

var a = from ea in db.EmailAddress
join p in db.Person on ea.BusinessEntityId equals p.BusinessEntityId
join pp in db.PersonPhone on p.BusinessEntityId equals pp.BusinessEntityId
where p.BusinessEntityId == person.BusinessEntityId
select new
{

};

PersonIndexViewModel vm = new PersonIndexViewModel()
{
Person = person,
PersonPhone = person.PersonPhone.FirstOrDefault(),
EmailAddress = person.EmailAddress.FirstOrDefault()
};

// pass the viewmodel so it's data can be accessed in the view (Person, PersonPhone, EmailAddress)
return View(vm);
}

我的主要目标是我可以将 PhoneNumber 和 EmailAddress 附加到 Person 对象,以便在我分配值后可以在我的 ViewModel 中使用它,如下所示:

PersonPhone = person.PersonPhone.FirstOrDefault(),
EmailAddress = person.EmailAddress.FirstOrDefault()

然后在我的 ViewModel 中我可以这样做

@Model.PersonPhone.PhoneNumber

最佳答案

public IActionResult Index()
{
var vm = from p in db.Person
where p.BusinessEntityId == 1
select new PersonIndexViewModel
{
Person = p,
PersonPhone = p.PersonPhone.FirstOrDefault(),
EmailAddress = p.EmailAddress.FirstOrDefault()
};


return View(vm.FirstOrDefault());
}

如果你想显示每个人的多个电话/邮件,你需要将 PersonIndexViewModel.PersonPhonePersonIndexViewModel.EmailAddress 类型更改为 List<>,并填充 ToList() 而不是 FirstOrDefault() 并在 razor View 中编写 foreach 语句。

关于c# - 如何使用 LINQ SQL 连接根据 ID 连接 3 个表? C# MVC(.NET Core 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com