【发布时间】:2010-08-16 11:33:47
【问题描述】:
我正在尝试优化 LINQ to SQL 请求,以使其生成单个 SQL 语句。目前我有这样的事情:
EDIT :为清楚起见删除了“where”过滤器 - “Id” 也是两种对象类型的数据库中的主键
hotel = (from h in db.Hotels
let rooms = (from r in db.HotelRooms
where r.HotelId == h.Id
select new HotelRoom
{
Id = r.Id,
Code = r.Code,
Category = r.Category
})
select new Hotel
{
Id = h.Id,
Name = h.Name,
Rooms = rooms.ToList()
}).FirstOrDefault();
酒店业务级别类定义为:
public class Hotel
{
public int Id { get; set; }
public string Name { get; set; }
public List<HotelRoom> Rooms { get; set; }
}
其中查询使用初始化程序在执行查询时从 DataContext 实体动态创建 business 对象。
问题显然是,Rooms 集合上的 .ToList() 会导致通过第二个查询填充 Hotel.Rooms 集合。
有没有办法用所有 HotelRooms 填充 Hotel.Rooms 属性,而不会产生额外的查询?
【问题讨论】:
标签: .net linq-to-sql