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 Loading 和 Include
方法,您想要实现的目标很容易实现。可以找到更多信息 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));
}
我正在尝试使用 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 Loading 和 Include
方法,您想要实现的目标很容易实现。可以找到更多信息 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));
}