我认为我正式会有点疯狂:)我已经有一些与Linq XML的工作,但因速度问题,我不得不返工和转换数据的地方它在一个地方数据库代替。现在我正在修改自己的管道代码以考虑Linq2Sql,但子查询与XML提供程序一起工作的返回方法结果的方法似乎现在不想工作?linq不返回所有对象的子查询方法
UPDATE
我发现我使用显示结果我的控制台应用程序做一些有趣的事情。例如,如果我调用的方法顺序如下:
var available = manager.DoesHotelHaveAvailabilityForPeriod("BTHA", start, end, 10);
var results = manager.GetRoomTypesForPeriod("BTHA", start, end);
可用性的作品,但getRoomTypes犯规返回roomTypes,如果我周围的交换他们则恰巧相反,返回了房间类型,但随后availabilility返回false,所以这就是为什么我得到了奇怪的结果,我只是不知道为什么会发生这种情况?
例如我的仓库返回此:
public LinqAvailabilityRepository()
{
var context = new AvailabilityDataContext();
_typesTable = context.GetTable<RoomType>();
}
我顶层的方法调用执行此
public List<RoomType> GetRoomTypes(string hotelCode)
{
var results = from rt in _repository.RoomTypes
where rt.Rooms.Any(r => r.HotelCode == hotelCode)
select rt;
return results.ToList();
}
这个当我输出它的工作原理到屏幕在控制台
public List<RoomType> GetRoomAvailability(string hotelCode, DateTime startDate, DateTime endDate, int daysRequired)
{
var items = GetRoomTypes(hotelCode);
var results = items.Select(rt =>
new RoomType
{
id = rt.id,
Code = rt.Code,
Description = rt.Description,
Name = rt.Name,
Rooms = rt.Rooms.Select(r =>
new Room
{
id = r.id,
RoomRates = r.RoomRates.Where(rr => rr.EffectiveDate >= startDate &&
rr.EffectiveDate <= endDate).ToEntitySet()
})
.Where(r => r.RoomRates.Count == daysRequired)
.OrderByDescending(r => r.RoomRates.Count()).ToEntitySet()
});
return results.ToList();
}
但是,当我打电话给以下时,房间集合为0,但我知道该方法返回基于相同查询的房间,因为之前我直接调用上述方法时输出了它。
public bool DoesHotelHaveAvailabilityForPeriod(string hotelCode, DateTime startDate, DateTime endDate, int daysRequired)
{
var items = GetRoomAvailability(hotelCode, startDate, endDate, daysRequired).ToList();
return ((from i in items
where i.Rooms.Count == daysRequired
select i).Count() > 0);
}
这也恰好为一对夫妇的地方,当我尝试这样子查询,我尽量不重复自己,用相同的代码不返回其他对象的其他方法,是不是我应该知道或我没有做?
任何帮助理解这将不胜感激。
抢在某些情况下,在某些情况下不
这是有趣的,上面的代码调用列出来很多次,因为我是desperatly尝试任何:)我已经更新了做新发现的问题,将在该方案中该解决方案帮助? – Modika
我觉得包括是一个EF操作,而不是一般的Linq到SQL,因为我似乎无法使它工作 – Modika
是的,Include是EF特定的。 LINQ to SQL Equivalent使用LoadWith(t => t.child)设置Context的LoadOptions。 –