【问题标题】:Entity framework mvc how can I use inner join?实体框架 mvc 如何使用内部联接?
【发布时间】:2018-09-06 07:22:31
【问题描述】:

我正在尝试使用 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 操作将 driver 表连接到 company 表并将数据发送到查看器

编辑

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

【问题讨论】:

  • 您的问题不清楚。但作为旁注:条件不应该是on d.CompanyGuid equals c.Guid 而不是d.CompanyId equals c.Guid
  • 问题编辑sql数据库
  • 你并不是真的在问问题。我们可以帮助解决什么问题?
  • 我想从公司的表格中抽出名字
  • 这仍然不是问题。一个典型的 Stack Overflow 问题应该包含四个要素:您想要实现什么,您尝试了什么,您没有成功或陷入困境的地方,以及一个询问如何解决这个特定问题的问题。您的“问题”缺少最后两个元素。

标签: c# .net join linq-to-sql devexpress


【解决方案1】:

如果您将 Eager LoadingInclude 方法一起使用,那么您想要实现的目标很容易实现。更多信息可以在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();

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2019-05-14
      相关资源
      最近更新 更多