LINQ to Entities не распознает метод метода System.String ToString () при преобразовании Nullable DateTime - PullRequest
2 голосов
/ 11 октября 2011

Я пытаюсь получить день недели из Nullable DateTime, а затем присоединяюсь к списку дней.

Моим решением было сначала преобразовать его в DateTime, но Linq to Entities это не нравится.

LIST - это IEnumerable<string>

предложения?

        var result = from X in model.X
                     where X.StartDate.HasValue
                     join item in LIST on
                        Convert.ToDateTime(X.StartDate).DayOfWeek.ToString() equals item
                     select X;

Преобразование в цепочку методов не поможет:

var result = model.X.Where(x => x.StartDate.HasValue).Join(LIST,x => Convert.ToDateTime(x.StartDate).DayOfWeek.ToString(), item => item, (x, item) => x);

Ответы [ 4 ]

2 голосов
/ 11 октября 2011
var result = from X in model.X
             where X.StartDate.HasValue && 
                   List.Contains(SqlFunctions.DatePart("weekday", X.StartDate))
             select X;

weekday возвращает int, поэтому у вас должен быть список целых чисел, а не строк

1 голос
/ 06 февраля 2012

.ToString () не поддерживается Linq-To-Entities, как и ряд других методов расширения.

Короткая (и, возможно, в некоторой степени неточная) причина заключается в том, что .ToString () в вышеприведенном контексте отправляется на Sql Server для запуска в запросе. Sql Server не имеет представления о том, что такое .ToString (), и поэтому завершается ошибкой, когда анализатор запросов Sql Server пытается его выполнить.

также, FYI

http://msdn.microsoft.com/en-us/library/bb738550.aspx

1 голос
/ 25 января 2012

это будет работать, если вы используете .ToList() до конвертации. Значение приведения сущности 4.0 как DateTime

var result = model.X.Where(x => x.StartDate.HasValue).ToList().Join(LIST,x => Convert.ToDateTime(x.StartDate).DayOfWeek.ToString(), item => item, (x, item) => x);
0 голосов
/ 11 октября 2011

РЕДАКТИРОВАТЬ: Не используйте этот код.Здесь оставлено, чтобы показать вам, что будет не работать, и поэтому вы сможете увидеть причины Криса, почему и как решить.

Не проверено:

    var result = from X in model.X
                 where ((X.StartDate != null) && X.StartDate.HasValue)
                 join item in LIST on
                    Convert.ToDateTime(X.StartDate).DayOfWeek.ToString() equals item
                 select X;

вы объявили StartDate как поле Nullable, поэтому вам следует проверить наличие нулевых значений.

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