Entity framework mvc 如何使用内部连接?

Entity framework mvc how can I use inner join?

我正在尝试使用 DevExpress mvc 开发一个项目。我使用 Entity Framework 进行数据库连接。 我想要做的是将两个 tables 与 c table 中的 companyId 和 k table

中的 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))            
    )
)

我的 Driver 控制器 ;

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

获取操作将 driver table 连接到公司 table 并将数据发送给查看器

编辑

我的 plate_log table ;

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

driver table ;

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

和公司table;

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

如果您使用 Eager LoadingInclude 方法,您想要实现的目标很容易实现。可以找到更多信息 here

这会自动在幕后生成 LINQ,它会带来 table 中的请求及其请求的相关 table。根据我在您的模型中看到的内容,我认为您还需要在 table 之间提供导航属性来定义它们的关系。

举个例子:

型号

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();

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

我找到了解决方案。 驱动程序控制器编辑;

public HttpResponseMessage Gets(DataSourceLoadOptions loadOptions)
        {
            var sorgu = (from c in db.company
                        join d in db.driver
                        on c.Guid equals d.CompanyId
                        orderby c.Guid descending
                        select new { Guid= d.Guid, Name=c.Name, });
            return Request.CreateResponse(DataSourceLoader.Load(sorgu.ToList(), loadOptions));
        }