[英]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; }
}
你能给我例子吗?
如果我想从“事故”表中获取所有值的列表,包括“运输”和“人”表中的数据
如果要获取按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.