Linq To Sql: член Date не поддерживает перевод на SQL - PullRequest
4 голосов
/ 09 сентября 2009

Рассмотрим класс, который используется для представления результатов GroupBy(). Цель кода - заменить хранимую процедуру, которая бы сгруппировала и посчитала кучу строк, в поле Created datetime.

public class Statistic
{
    public int NumRecords { get; set; }
    public DateTime Date { get; set; }
}

Вот код, вызывающий исключение / предупреждение:

//returning an IEnumerable<Statistic>
return db.MyTable
            .GroupBy(x => x.CreatedOn.Date ) //precision of date, not time.
            .Select(x => new Statistic(x.Key, x.Count()) ) //custom object
            .OrderBy(x => x.Date);

Исключение:

Участник Дата не поддерживается перевод на SQL

Когда я выполняю рефакторинг кода для загрузки в var, на OrderBy().

генерируется исключение / предупреждение.

Вопрос : Как я могу избежать этого исключения, используя Linq To Sql?

Ответы [ 2 ]

8 голосов
/ 09 сентября 2009

Я сталкивался с этим раньше, когда использовал конструктор не по умолчанию. Если вместо этого вы используете инициализатор объекта , Linq to Sql может выяснить соответствие:

return db.MyTable
            .GroupBy(x => x.CreatedOn.Date ) //precision of date, not time.
            .Select(x => new Statistic{Date = x.Key, NumRecords = x.Count()} ) //custom object
            .OrderBy(x => x.Date);
1 голос
/ 09 сентября 2009

Оказывается, что запрос не был выполнен и загружен в переменную, когда я ожидал.

Следующее будет оцениваться и работать правильно, как и ожидалось.

IEnumerable<Statistic> stats = db.MyTable           
        .GroupBy(x => x.CreatedOn.Date )
        .Select(x=> new Statistic(x.Key, x.Count()) );


    return stats.OrderBy(x=>x.Date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...