Ошибка LINQ to Entities при использовании перечислимого метода SequenceEqual - PullRequest
4 голосов
/ 11 апреля 2011

У меня есть следующий оператор LINQ (stationId - это int, а версия - байтовый массив):

            var foundStation = (from wd in _Context.AssignmentWizardDatas
                from station in wd.AssignmentWizardStationDatas
                where station.Id == stationId
                where station.Version.SequenceEqual(version)
                select station).SingleOrDefault();

При выполнении приведенного выше кода я сталкиваюсь со следующей ошибкой:

LINQ to Entities не распознает метод «Boolean SequenceEqual [Byte] (System.Collections.Generic.IEnumerable 1[System.Byte], System.Collections.Generic.IEnumerable 1 [System.Byte])», и этот метод нельзя преобразовать в выражение хранилища.

После небольшого прочтения я понял, что проблема в том, что LINQ не может преобразовать вызов метода SequenceEqual в эквивалент SQL (я думаю, в любом случае).Кто-нибудь знает обходное решение для этого?Или, может быть, мог бы указать мне правильное направление при попытке использовать байтовые массивы с запросами LINQ, я не смог найти существующий вопрос, конкретно связанный с байтовыми массивами.

Заранее спасибо.

РЕДАКТИРОВАТЬ : Используя сообщение Яни, это был последний код, используемый для устранения этой ошибки:

        //eager execution of the linq query to find the stations 
   var foundStation = (from wd in _Context.AssignmentWizardDatas
                            from station in wd.AssignmentWizardStationDatas
                            where station.Id == stationId
                            select station).ToList();
   //finding the result in memory   
        var result = (from f in foundStation
                      where f.Version.SequenceEqual(version)
                      select f).SingleOrDefault();

Ответы [ 2 ]

8 голосов
/ 11 апреля 2011

Вы правы в том, как интерпретируете ошибку, но вам вообще не нужен SequenceEquals() - вы можете напрямую сравнивать байтовый массив, если вы связываетесь с varbinary(MAX) в БД.

var foundStation = (from wd in _Context.AssignmentWizardDatas
from station in wd.AssignmentWizardStationDatas
where station.Id == stationId
where station.Version == version
select station).SingleOrDefault();
4 голосов
/ 11 апреля 2011
//eager execution of the linq query to find the stations
var foundStation = (from wd in _Context.AssignmentWizardDatas
                    where wd.Id == stationId
                    select station).ToList();
//finding the result in memory  
var result = from f in foundStation 
             where f.version.SequenceEqual(version)
             select f; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...