首页 > 解决方案 > 实体框架 mvc 如何使用内部联接?

问题描述

我正在尝试使用 DevExpress mvc 开发一个项目。我使用实体框架进行数据库连接。我想要做的是将两个表与 c 表中的 companyId 和 k 表中的 guId 结合起来

我想做的事; https://ekitapdfindir.com/istek.png

我的索引视图;

@(Html.DevExtreme().DataGrid<plate_logs>()
        .ShowBorders(true)
        .DataSource(d => d.WebApi().Controller("PlateLogs").Key("Guid"))
        .Columns(columns =>
        {
            columns.AddFor(m => m.Guid).Width(100);
            columns.AddFor(m => m.LastUpdateDate).Width(90);
            // Columns Location ID
            columns.AddFor(m => m.LocationId)
                .Lookup(lookup =>
                    lookup
                    .DataSource(d => d.WebApi()
                        .Controller("Locations")
                        .LoadAction("Get")
                        .Key("adsad"))
                    .DisplayExpr("Name")
                    .ValueExpr("Guid"));
            // Columns Gate ID
            columns.AddFor(m=>m.GateId)
                .Lookup(lookup => lookup
                    .DataSource(d => d.WebApi()
                        .Controller("Gates")
                        .LoadAction("Get")
                        .Key("GateId"))
                    .DisplayExpr("Name")
                    .ValueExpr("Guid"));
            // Columns Departmant ID
            columns.AddFor(m => m.DepartmentId)
               .Lookup(lookup => lookup
                   .DataSource(d => d.WebApi()
                       .Controller("Departments")
                       .LoadAction("Get")
                       .Key("DepartmentId"))
                   .DisplayExpr("Name")
                   .ValueExpr("Guid"));
            // Columns Driver ID 
            columns.AddFor(m => m.DriverId)
               .Lookup(lookup => lookup
                   .DataSource(d => d.WebApi()
                       .Controller("Driver")
                       .LoadAction("Get")
                       .Key("DriverId"))
                   .DisplayExpr("FullName")
                   .ValueExpr("Guid"));

            // Columns Company ID    
            columns.AddFor(m => m.DriverId)
               .Lookup(lookup => lookup
                   .DataSource(d => d.WebApi()
                       .Controller("Driver")
                       .LoadAction("Gets"))
                   .DisplayExpr("Name")
                   .ValueExpr("Guid"));

        })
        .Paging(p => p.PageSize(20))            
    )
)

我的驱动控制器;

        LCWCENTEREntities db = new LCWCENTEREntities();
        [HttpGet]
        public HttpResponseMessage Get(DataSourceLoadOptions loadOptions)
        {
            var model = db.driver.ToList();
            return Request.CreateResponse(DataSourceLoader.Load(model, loadOptions));
        }
        [HttpGet]
        public HttpResponseMessage Gets(DataSourceLoadOptions loadOptions)
        {
            var sorgu = from d in db.driver
                        join c in db.company
                        on d.CompanyId equals c.Guid
                        select  new {d,c };
            return Request.CreateResponse(DataSourceLoader.Load(sorgu, loadOptions));
        }

获取操作将驱动程序表连接到公司表并将数据发送到查看器

编辑

我的 plate_log 表;

    public partial class plate_logs
    {
        public int Id { get; set; }
        public long Guid { get; set; }
        public string Plate { get; set; }
        public Nullable<long> DriverId { get; set; }
        public Nullable<System.DateTime> LastUpdateDate { get; set; }
        public Nullable<byte> isRemoved { get; set; }
    }

驱动程序表;

    public partial class driver
    {
        public int Id { get; set; }
        public long Guid { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string FullName { get; set; }
        public Nullable<long> CompanyId { get; set; }
        public Nullable<byte> isRemoved { get; set; }
    }

和公司表;

    public partial class company
    {
        public short Id { get; set; }
        public long Guid { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
        public string PhoneNumber { get; set; }
        public Nullable<short> isSync { get; set; }
        public Nullable<System.DateTime> LastUpdateDate { get; set; }
        public Nullable<byte> isRemoved { get; set; }
    }

标签: c#.netjoinlinq-to-sqldevexpress

解决方案


如果您将Eager Loading与该Include方法一起使用,那么您想要实现的目标很容易。更多信息可以在这里找到。

这会在后台自动生成 LINQ,从而将表连同其请求的相关表带入请求中。从我在您的模型中看到的情况来看,我认为您还需要在表之间提供导航属性以定义它们的关系。

所以一个例子就像:

楷模

public class A 
{
       public int PropertyA {get; set;}

       public B B {get; set;}
}

public class B 
{
       public int PropertyB {get; set;}

       public A A {get; set;}
}

在控制器中,您现在需要使用 Include() 调用 LINQ 方法,例如

控制器

context_variable.A.Include(x => x.B).ToList();

我希望这对您有所帮助,并且足够解释。


推荐阅读