【发布时间】:2013-12-18 22:30:02
【问题描述】:
在数据库中,我有两个具有一对多关系的表:
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();
【问题讨论】:
-
没有。我不想要内连接,我的查询是左连接。我还专门寻找创建具有 DB 结构具有的一对多关系的对象列表的方法。仅仅做一个连接不会让我明白这一点。
-
@MikeRoberts 你应该标记 EntityFramework 或 LinqToSQL
标签: c# linq entity-framework linq-to-entities