繁体   English   中英

如何使用LINQ to Entities查询联接表?

[英]How to join tables using LINQ to Entities query?

我有一个简单的数据库结构:

public class Person
{
    [Key]
    public int PersonID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Transport
{
    [Key]
    public int TransportID { get; set; }
    public string Model { get; set; }
    public string Brand { get; set; }
}

public class Accident
{
    [Key]
    public int AccsidentID { get; set; }
    public DateTime AccidentDate { get; set; }
    public int TransportID { get; set; }
    [ForeignKey("TransportID")]
    public virtual Transport Transport { get; set; }

    public int PersonID { get; set; }
    [ForeignKey("PersonID")]
    public virtual Person Person { get; set; }
}

我需要创建事故列表,直到可以将其传递给WPF表单(使用MVVM)

首先,我创建了我想在GridControl中看到的新类女巫

public class AccsidentObject
{
    [Key]
    public int AccidentID { get; set; }
    public DateTime AccidentDate { get; set; }
    public int TransportID { get; set; }
    public string Model { get; set; }
    public string Brand { get; set; }
    public int PersonID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
 }

你能给我例子吗?

  1. 如果我想从“事故”表中获取所有值的列表,包括“运输”和“人”表中的数据

  2. 如果要获取按TransportID分组的事故列表(还包括“人员”和“运输”表中的数据)

我从Linq查询中获取数据:

var result = from ac in DBContext.Accidents select ac;
List<Accident> accidentList = result.toList();

但是我需要添加一些字段以从其他表中列出,这将是什么代码?

我做错了什么,无法构造AccidentObject的列表,也许我的DBContext中有一些错误,列出了某些东西……请您能帮助我了解List元素吗?

考虑到我写了两部分:

var结果=来自DBContext中的ac.Accidents选择ac;

结果= result.GroupBy(g => g.TransportID).toList();

现在,我需要添加一些传输详细信息并格式化AccsidentObject列表...

var accidents = DBContext.Accidents.Select( a => new AccidentObject 
{ 
    AccidentID = a.AccidentId,
    AccidentDate 
    TransportID 
    Model 
    Brand = a.Transport.Brand,
    PersonID = a.Person.PersonID,
    FirstName 
    LastName 
});

并以几乎相同的方式填写空白。 这是一个不使用lambda表达式的linq示例,如果愿意,它包括group by子句: Linq to sql select into a new class

要获取具有急切填充的关联的实体(或实体集合),请使用Include扩展方法,或在最终投影中包含您的类型:

var res = await (from a in ctx.Accidents
                 select new AccsidentObject {
                    AccidentID = a.AccidentID,
                    TransportID = a.Transport.TransportID,
                    Model = a.Transport.Model,
                    // …
                 }).ToListAsync();

您可以在LINQ理解表达式中使用groupby进行分组。 结果, Key属性是分组的事物,每个实例是分组的所有事物的集合。

var res = await (from a in ctx.Accidents
                 group by a.TransportID into g
                 select new {
                   TransportID = g.Key,
                   Accidents = g
                 }).ToListAsync();

在产生的匿名类型中, Accidents属性为Accident的集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM