c# - linq的子查询方法不返回所有对象

标签 c# linq linq-to-sql

我想我正式有点疯狂了:) 我有一些使用 Linq to XML 的东西,但由于速度问题,我不得不重新处理和转换数据并将其放在数据库中。现在我正在修改我的管道代码以考虑到 Linq2Sql,但是查询返回的方法结果的方法 sub 查询与 XML 提供程序一起工作的方法现在似乎不想工作?


更新

我发现我用来显示结果的控制台应用程序正在做一些有趣的事情。例如,如果我按以下顺序调用方法:

        var available = manager.DoesHotelHaveAvailabilityForPeriod("BTHA", start, end, 10);
        var results = manager.GetRoomTypesForPeriod("BTHA", start, end);

可用性有效但 getRoomTypes 不返回房间类型,如果我交换它们然后相反的情况发生,房间类型被返回但可用性然后返回 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);
    }

这也发生在其他几个方法中,当我尝试像这样子查询时不返回其他对象,我试图不重复使用相同的代码,有什么我应该知道或没有做的吗?

如果能帮助理解这一点,我们将不胜感激。

罗布

最佳答案

所以您的函数 GetRoomAvailability() 在某些情况下返回正确,而在某些情况下返回错误?

如何追踪它并使用一些断点来查看它的不同之处?

我不确定,但为什么要将 GetRoomAvailability() ToList() 的返回值转换为 ToList(),然后在 DoesHotelHaveAvailabilityForPeriod() 中再次接收时执行此操作?

关于c# - linq的子查询方法不返回所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7237057/

相关文章:

c# - EntityFramework.Extended Future 错误(JIT 编译器内部限制)

c# - 序列不包含任何元素 Error Max()

c# - 如何强制 LINQ to SQL 评估数据库中的整个查询?

c# - Windows/.Net 中的蓝牙 API?

c# - 如何检查数据是否在范围内

c# - 将多个 ContentView 放在一个 ScrollView 中

c# - 使用 LinQ 从列表返回另一个列表中不存在的值

c# - 如何根据 ID 从员工薪水第二高的员工集合中选择具有 LINQ 的不同员工?

c# - 如何使用存储过程在 LINQ to SQL 中使用事务?

linq - Linq 中的全文搜索