我有一个简单的数据库结构:
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; }
}
请你举个例子:
如果我想从Accident表中获取所有值的列表,包括来自Transport和Person表的数据
如果我想获得按TransportID分组的事故列表(也包括来自人员和交通表的数据)
我从Linq查询中获取数据:
var result = from ac in DBContext.Accidents select ac;
List<Accident> accidentList = result.toList();
但我需要添加一些字段来列出其他表,代码是什么?
我做错了什么并且无法构造一个AccidentObject列表,也许我的DBContext中有一些错误,列出了什么......你能帮我理解一下List元素吗?
考虑到我写的两部分:
var result =来自DBContext.Accidents中的ac选择ac;
result = result.GroupBy(g =&gt; g.TransportID).toList();
现在我需要添加一些传输详细信息并格式化AccsidentObject列表......
答案 0 :(得分:1)
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
答案 1 :(得分:1)
要获得具有热切填充关联的实体(或实体集合),请使用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
的集合。