Поле форматирования в выражении LINQ - PullRequest
2 голосов
/ 24 марта 2011

Я пытаюсь отобразить диаграмму из следующего запроса:

Анкеты, созданные по месяцам, и формат месяца в мм / ГГГГ

Мой код:

    public ActionResult QuestionnairesByMonth() {

        var query = TrialDB.Questionnaires
            .GroupBy(r => new {
                Month = r.DateCreated.Month,
                Year = r.DateCreated.Year,
            })
            .Select(group => new {
                Date = string.Format("{0}/{1}", group.Key.Year, group.Key.Month),
                Total = group.Count()
            })
            .ToList();

        var chart = new Chart(400, 200)
            .AddTitle("Questionarios creados por mes")
            .DataBindTable(query, "Date")
            .Write();

        return null;
    }

но я получаю следующую ошибку:

LINQ to Entities не распознает метод метода System.String ToString (System.String), и этот метод нельзя преобразовать в выражение хранилища.

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Я предлагаю вам извлечь все, что вам нужно, в «простом» запросе Select, который пойдет в базу данных, а затем выполнить форматирование локально, используя AsEnumerable, чтобы переключиться на внутрипроцессный запрос:

var query = TrialDB.Questionnaires
    .GroupBy(r => new {
        Month = r.DateCreated.Month,
        Year = r.DateCreated.Year,
    })
    .Select(group => new {
        group.Key.Year,
        group.Key.Month,
        Total = group.Count()
    })
    .AsEnumerable()
    .Select(x => x.Total, Date = string.Format("{0}/{1}", x.Year, x.Month))
    .ToList();

Или оставьте его как DateTime при извлечении из базы данных, как предлагает Стюарт:

var query = TrialDB.Questionnaires
    .GroupBy(r => new {
        Month = r.DateCreated.Month,
        Year = r.DateCreated.Year,
    })
    .Select(group => new {
        Date = group.Key,
        Total = group.Count()
    })
    .AsEnumerable()
    .Select(x => x.Total,
                 Date = string.Format("{0}/{1}", x.Date.Year, x.Date.Month))
    .ToList();

Подробнее о AsEnumerable() читайте в моем блоге Edulinq об этом .

0 голосов
/ 24 марта 2011

Я думаю, что сама база данных не понимает string.Format("{0}/{1}", group.Key.Year, group.Key.Month) - поэтому вам нужно извлечь информацию в виде DateTime, а затем отформатировать дату на уровне презентации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...