LINQ to Entities не распознает метод «System.String ToBase64String(Byte[])»,

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

 var activityList = (from item in committeeMemberList
                let committee = db.Committee.FirstOrDefault(x => x.Committee_Id == item.Committee_Id)
                let contact = db.Contacts.FirstOrDefault(x => x.Contact_Id == item.Contact_Id)
                select new Activity
                {
                   Id = Convert.ToBase64String(item.Committee_Member_SPE_Id), 
                   Name = committee.Committee_Name, 
                   ...
                   ...

                  }).ToList();

person James123    schedule 13.03.2013    source источник
comment
хорошо, но в чем вопрос?   -  person MarcinJuraszek    schedule 13.03.2013
comment
Итак, вы задаетесь вопросом, как это сделать, я полагаю?   -  person scott.korin    schedule 13.03.2013
comment
вам нужно сделать преобразование после LINQ. У меня была такая проблема (я не мог преобразовать идентификатор в целое число во время запроса linq), и я преобразовал его позже в код.   -  person Adrian Księżarczyk    schedule 13.03.2013
comment
Проблема в том, что функция ToBase64String не может быть скомпилирована в SQL. При вызове ToList() строится запрос и заполняется список. Это означает, что вы должны вызвать ToList() перед вызовом функцииToBase64String.   -  person Peter Bruins    schedule 10.04.2017


Ответы (2)


Измените свой LINQ, чтобы ваш исходный оператор возвращал список анонимных объектов, а затем выберите в ЭТОМ списке и используйте функцию ToBase64String:

var activityList = 
            (from item in
                (from member in committeeMemberList
                let committee = db.Committee.FirstOrDefault(x => x.Committee_Id == item.Committee_Id)
                let contact = db.Contacts.FirstOrDefault(x => x.Contact_Id == item.Contact_Id)
                select new
                {
                   Id = member.Committee_Member_SPE_Id, 
                   Name = committee.Committee_Name, 
                   ...
                   ...
                 }).ToList())
            select new Activity
            {
               Id = Convert.ToBase64String(item.Id), 
               Name = committee.Committee_Name, 
               ...
               ...

            }).ToList();
person scott.korin    schedule 13.03.2013
comment
(видимо, это сработало, потому что это был принятый ответ) - person scott.korin; 20.12.2018

person    schedule
comment
Можете ли вы объяснить, как это отвечает на вопрос? - person Ḟḹáḿíṅḡ Ⱬỏḿƀíé; 10.04.2017
comment
DBContect не распознает некоторые встроенные функции, такие как функции преобразования и т. д., во время выполнения. Поэтому выполняйте запрос linq так же, как и с DBContext. Наконец, обновите список через цикл и ForEach в цикле на основе списка, который обновляет все указанные поля. Поскольку он не подключен и не связан с DBContext, здесь будут работать все функции. :) .. Я использую то же самое и отлично работаю :) - person Minhajul Islam; 11.04.2017