如何在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 =某个值的特定记录。

如果有人能给我一些帮助,我将非常感激。马努

如何在MVC控制器中使用Linq连接两个表

您可以按照如下所示进行内部连接。

假设:希望您的表名像Tbl_Group_CommunitiesKatastralgemeinden,换句话说,与类名相同。

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;
        }
    }
}

问候,马努