LINQ в бизнес-уровне просмотр страниц / сортировка сетки в пользовательском уровне - PullRequest
0 голосов
/ 18 января 2011

У меня есть gridView в моем пользовательском уровне, который использует метод бизнес-уровня в качестве источника данных, и я хочу, чтобы gridview поддерживал разбиение на страницы и сортировку.Когда я вернул Ienumerable из метода, он вернет все данные.Если я использую Take / Skip, чтобы вернуть только ценность страницы, gridview не понимает, что существует много страниц данных.

Когда я меняю Ienumerable на IQueryable, DataBind () завершается ошибкой, поскольку данные уже удалены.Я думаю, что эта проблема связана с тем, когда запрос действительно выполняется, и может иметь отношение к фильтрам, которые я применяю к запросу (см. Ниже).

Код уровня пользователя:

grdSelectedQuestionaires.DataSource = assessment.FilteredAssessmentList(filter);
grdSelectedQuestionaires.DataBind(); <-- Fails - "Cannot access a disposed object"

Код бизнес-уровня:

public IQueryable<Assessment> FilteredAssessmentList(AssessmentSearchFilter filter)
    {
        using (PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext())
        {
            var rows = (
                    from a in dc.vPAQSummaries
                    select new Assessment()
                    {
                        PAQNumber = a.PAQNumber.Trim(),
                        CustomerID = (int)a.CustomerID,
                        Department = a.Department.Trim(),
                        CustomerName = a.CustomerName.Trim(),
                        DOTNumber = a.DOTNumber.Trim(),
                        OrgName = a.OrgName.Trim(),
                        DateEntered = a.DateEntered,
                        GroupNumber = a.GroupNumber.Trim(),
                        JobTitle = a.JobTitle.Trim(),
                        FileNames = a.FileNames.Trim(),
                        AnalystType = a.AnalystType.ToString(),
                        Incumbents = a.Incumbents,
                    });

            //  Filter by Customer ID
            if (filter.CustomerID > 0)
            {
                rows = rows.Where(r => r.CustomerID == filter.CustomerID);
            }
            else
            {
                rows = rows.Where(r => r.CustomerID != null);
            }

            //  Filter by DOT Number
            if (!string.IsNullOrEmpty(filter.DOTNumberFrom))
            {
                if (string.IsNullOrEmpty(filter.DOTNumberTo))
                {
                    rows = rows.Where(r => r.DOTNumber == filter.DOTNumberFrom);
                }
                else
                {
                    rows = rows.Where(r => r.DOTNumber.CompareTo(filter.DOTNumberFrom) >= 0
                        && r.DOTNumber.CompareTo(filter.DOTNumberTo) <= 0);
                }
            }

            //  Filter by OrgName
            if (!string.IsNullOrEmpty(filter.OrgName))
            {
                rows = rows.Where(r => r.OrgName.StartsWith(filter.OrgName));
            }

            //  Filter by Group
            if (!string.IsNullOrEmpty(filter.GroupNumberFrom))
            {
                if (!string.IsNullOrEmpty(filter.GroupNumberTo))
                {
                    rows = rows.Where(r => r.GroupNumber == filter.GroupNumberFrom);
                }
                else
                {
                    rows = rows.Where(r => r.GroupNumber.CompareTo(filter.GroupNumberFrom) >= 0
                        && r.GroupNumber.CompareTo(filter.GroupNumberTo) <= 0);
                }
            }

            if (filter.Skip > 0)
            {
                rows = rows.Skip(filter.Skip);
            }
            if (filter.Take > 0)
            {
                rows = rows.Take(filter.Take);
            }
            else
            {
                rows = rows.Take(100);
            }

            return rows.Distinct();
        }
    }
}

1 Ответ

0 голосов
/ 18 января 2011

Проблема с подкачкой была вызвана оператором Using.Изменяя это:

using (PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext())
{
...
}

на это:

PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext();

Сделано пейджинговая работа.Теперь я должен выяснить, как работает сортировка.

...