Следующий код прекрасно работает в LINQPad:не может бросить строки в GUID в LINQ для лиц
(from u in AspNetUsers
let userOrders = (from uo in UserOrders where uo.UserId == new Guid(u.Id) select uo)
select u)
Однако, когда я пытаюсь выполнить один и тот же код из моего приложения MVC, это дает мне следующую ошибку:
var users = (from u in ctx.Users
let userOrders = (from uo in ctx.UserOrders where uo.UserId == new Guid(u.Id) select uo)
select u);
Only parameterless constructors and initializers are supported in LINQ to Entities.
Я не помню, когда-либо какие-либо вопросы, конвертирование строки в GUID в Linq к Entities раньше. Мне не хватает ссылки?
Я уже включены все ссылки я мог думать о:
using System.Linq;
using System.Data.Entity;
Почему это работает в LINQPad, но не в MVC?
Edit: Как ни странно, это похоже на работу:
let userOrders = (from uo in ctx.UserOrders where uo.UserId.ToString() == u.Id select uo)
'new Guid (u.Id)' <= вы не можете это сделать (как указано в сообщении об исключении). Если вы использовали Linq для объектов (в памяти), вы могли бы это сделать, но это не могло быть переведено в хранилище данных. – Igor
Также кажется, что это пользовательские таблицы, если вы, вероятно, хотите какой-либо FK, и в этом случае идентификаторы должны иметь одинаковый тип в любом случае, лучший вариант - исправить схему хранилища, чтобы соответствовать типам. – Igor
Схема сама по себе не является «настраиваемой», она исходит из конструкции AspNetUsers по умолчанию из MVC, где идентификатор пользователя, GUID, представлен в виде строки. Я бы предпочел не менять его и хотел бы просто сопоставить его с другой таблицей. Должна быть простая функция, которая может преобразовать строку в 'uniqueindentifier'. Есть идеи? – user1477388