Служба домена RIA возвращает ноль, хотя NHibernate DAL возвращает данные

Привет, у меня есть следующий метод в моем NHibernate DAL:

 public IQueryable<WorkCellLoadGraphData> GetWorkCellLoadGraphDataById( string workCellId, DateTime startDate, DateTime endDate )
    {
        var workCellGraphData = ( from x in this.GetSession().Query<WorkCellLoadGraphData>()
                  where x.WorkCellId == workCellId && (x.FromTime >= startDate && x.FromTime <= endDate)
                  select new
                             {
                                 x.WorkCellId,
                                 x.CalendarId,
                                 x.FromTime,
                                 x.DurationInMinutes
                             });

        return workCellGraphData as IQueryable<WorkCellLoadGraphData>;
    }

Когда я ставлю точку останова на workCellGraphData, я получаю коллекцию объектов WorkCellGraphData.

Однако вызывающий код в классе обслуживания домена RIA для этого метода:

 public IQueryable<WorkCellLoadGraphData> GetWorkCellLoadGraphDataById()
    {          
        IQueryable<WorkCellLoadGraphData> result = ManufacturingDao.Instance.GetWorkCellLoadGraphDataById( "13", DateTime.Today, DateTime.Today.AddDays( 14 ) );
        return result;
    }

всегда возвращает ноль в "результате". Кто-нибудь может определить, почему?

ТИА,

Дэвид

2 ответа

Решение

В LINQ выполнение запроса обычно откладывается до момента, когда вы фактически запросите данные. При первом подходе вы только определяли запрос, но он никогда не выполнялся; в вашем втором подходе это было так, как только вам нужно было перечислить результаты.

Я не уверен, в чем разница, но мы решили эту конкретную проблему с помощью:

 public IList<WorkCellLoadGraphData> GetWorkCellLoadGraphDataByIdA(string workCellId, DateTime startDate, DateTime endDate)
    {
        IList<WorkCellLoadGraphData> results = new List<WorkCellLoadGraphData>();

        using (var session = this.GetSession())
        {

            var criteria = session.CreateCriteria(typeof(WorkCellLoadGraphData));

            criteria.SetProjection(
                Projections.ProjectionList()
                    .Add(Projections.Property(WorkCellLoadGraphData.WorkCellIdPropertyName), "WorkCellId")

                    .Add(Projections.Property(WorkCellLoadGraphData.FromTimePropertyName), "FromTime")
                    .Add(Projections.Property(WorkCellLoadGraphData.DurationPropertyName), "DurationInMinutes")
                    .Add( Projections.Property( WorkCellLoadGraphData.CalendarIdPropertyName), "CalendarId" )

                );

            criteria.Add(Restrictions.InsensitiveLike(WorkCellLoadGraphData.WorkCellIdPropertyName, workCellId));
            criteria.Add(Restrictions.Between(WorkCellLoadGraphData.FromTimePropertyName, startDate, endDate));

            criteria.SetResultTransformer(new AliasToBeanResultTransformer(typeof(WorkCellLoadGraphData)));

            results = criteria.List<WorkCellLoadGraphData>();
        }

                return results;
    }

Это действительно озадачивает, если не сказать больше...

Другие вопросы по тегам