我正在尝试使用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));
}
gets操作将驱动程序表连接到company表,并将数据发送到查看器
my 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; }
}
答案 0 :(得分:0)
如果将{em> Eager Loading 与Include
方法一起使用,那么您要实现的目标很容易实现。可以找到更多信息here。
这会在幕后自动生成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();
我希望这对您有所帮助,并且足以说明问题。
答案 1 :(得分:0)
我找到了解决方案。 驱动程序控制器编辑;
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));
}