#entity-framework-core #linq-to-entities
Вопрос:
У меня есть 2 разных объекта: EntityA и EntityB.
Все поля являются строками.
У меня есть общий класс ViewModel: MyViewModel.
У меня есть 2 запроса:
var query1 = from a in EntityA select new MyViewModel { field1=a.somefield1, field2= a.somefield2 };
var query2 = from a in EntityB select new MyViewModel { field1=a.somefield3, field2="String Constant" };
EntityA и EntityB разные, но мои 2 запроса дают нам один и тот же результат: IQueryable для MyViewModel.
Поэтому я пытаюсь заключить союз:
var query3 = query1.Union(query2);
Я получаю эту ошибку:
«Не удается перевести операцию набора, когда совпадающие столбцы с обеих сторон имеют разные типы хранилищ».
Это связано с тем, что EF не помещает один и тот же тип данных для моей строковой константы и.somefield2. somefield2-это varchar(100), но «Строковая константа» — это строка, и я не знаю, как ее перевести.
Спасибо
Версия dotnet .Net5, и я использую Microsoft.EntityFramework.Core.SQLServer 5.0.10
Комментарии:
1. Linq to SQL, EF и EF Core-это разные технологии с разными возможностями. Пожалуйста, укажите базовую версию EF, чтобы узнать, возможно ли то, о чем вы просите. Также в ошибке говорится, что «совпадающие столбцы с обеих сторон имеют разные типы хранилищ» — не уверен, что это значит, если их можно выбрать в одном и том же элементе модели представления, является ли реальный случай таким же, как показано на рисунке? каков тип элементов и соответствующих столбцов базы данных свойств сущностей?
2. Извините, не могу воспроизвести — та же версия EFC, свойства int и строки, она работает. Так что, вероятно, это что-то связанное с десятичной дробью и/или датой-временем, попробуйте закомментировать эти свойства по одному, пока они не начнут работать.
3. Хорошо, я понял проблему: Это проблема с типом данных: в одном запросе я возвращаю значение Int. Но во втором запросе я выполняю вычисление между 2 значениями int. И в результате получается не int. Я не знаю, что это такое. Есть ли способ принудительно изменить тип данных базы данных в классе viewmodel ? Спасибо
4. Сделать так, чтобы тип модели представления совпадал с тем, в который оба преобразуются? Каков тип расчета? долго? десятичная дробь? приведения, похоже, работают, по крайней мере, для SQLServer.
5. Я также воспроизвел его со строками перед публикацией последнего комментария. Но потом нашел обходной путь — использовать
= Convert.ToString(table.Field)
для таких полей. Ваше здоровье.