如何在MVC控制器中使用Linq连接两个表
本文关键字:连接 两个 Linq MVC 控制器 | 更新日期: 2023-09-27 18:15:27
我有两个1:n关系的sql数据库表。对于我的ASP。. NET mvc解决方案我启用了EF-code-first-migration,并建立了适当的DBContext和类。
我想写一个mvc控制器连接两个表,以便选择特定的记录显示在视图中。
下面是两个类:
public class Tbl_Group_Communities : Entity
{
public string GKZ { get; set; }
public int G_ID { get; set; }
}
public class Katastralgemeinden : Entity
{
public string KGNr { get; set; }
public string KGName { get; set; }
public string GKZ { get; set; }
public string GemeindeName { get; set; }
}
到目前为止,我已经能够自己提出一个工作控制器的表,但没有加入。在第一个类的工作控制器下面:
public IEnumerable<Tbl_Group_Communities> Get()
{
var entities = UnitOfWork.GetAll<Tbl_Group_Communities>().ToList();
return entities;
}
我想,连接可以用Linq完成,但我不知道如何/从哪里开始。这两个表的公共键是GKZ;所以连接应该通过GKZ建立。然后我需要从连接的记录中选择G_ID =某个值的特定记录。
如果有人能给我一些帮助,我将非常感激。马努您可以按照如下所示进行内部连接。
假设:希望您的表名像Tbl_Group_Communities
和Katastralgemeinden
,换句话说,与类名相同。
from s in db.Tbl_Group_Communities
join sa in db.Katastralgemeinden on s.GKZ equals sa.GKZ
where s.G_ID == 1
select s
您可以在这里了解更多关于join
的信息:连接操作符
我弄清楚了-这是我的控制器工作:
using System.Linq;
using System.Web.Http;
using System.Web.Http.OData.Query;
using IndireKat.Data.Contracts;
using IndireKat.Data.Contracts.Entities;
using IndireKat.Shared.Framework.Security;
namespace Presentation.Host.Controllers
{
public class KatastralgemeindenController : BaseODataController
{
private readonly IIdentityStorage identityStorage;
public KatastralgemeindenController(IUnitOfWork unitOfWork, IIdentityStorage identityStorage)
{
UnitOfWork = unitOfWork;
this.identityStorage = identityStorage;
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<Katastralgemeinden> Get()
{
IIndireKatPrincipal indireKatPrincipal = identityStorage.GetPrincipal();
var comunityIds = UnitOfWork.GetAll<UserGroup>()
.Where(group => group.Id == indireKatPrincipal.GroupId)
.SelectMany(group => group.Tbl_Group_Communities).Select(comunity => comunity.GKZ).ToList();
IQueryable<Katastralgemeinden> result = null;
if (comunityIds.Any())
{
result = UnitOfWork.GetAll<Katastralgemeinden>().Where(company => comunityIds.Contains(company.GKZ));
}
return result;
}
}
}
问候,马努