在数据库中,我有两个具有一对多关系的表:
orders suborders
----------- -----------
id id
name order_id
name
我想查询这些表并最终得到一个订单对象列表,每个对象都包含一个子订单对象列表(或空列表)。我还想在单个数据库查询中执行此操作,以便它表现良好。
在传统的 SQL 查询领域,我会做类似的事情(原谅伪代码):
rs = "select o.id, o.name, so.id, so.name from orders o left join suborders so on o.id = so.order_id order by o.id"
orders = new List<Order>
order = null
foreach (row in rs) {
if (order == null || row.get(o.id) != order.id) {
order = new Order(row.get(o.id), row.get(o.name), new List<Suborders>)
orders.add(order)
}
if (row.get(so.id) != null) {
order.suborders.add(new Suborder(row.get(so.id) row.get(so.name))
}
}
有没有办法使用 LINQ-to-Entities 获得相同的结果对象结构?请注意,我想从查询中获取新对象,而不是实体框架生成的对象。
以下内容让我接近,但引发异常:“LINQ to Entities 无法识别该方法...”
var orders =
(from o in Context.orders
join so in Context.suborders on o.id equals so.order_id into gj
select new Order
{
id = o.id,
name = o.name,
suborders = (from so in gj select new Suborder
{
so.id,
so.name
}).ToList()
}).ToList();