Я использую следующий код:
from c in Country
where c.IsActive.Equals(true)
orderby c.CountryName
select new
{
countryIDCode = c.CountryID + "|" + c.TwoDigitCode,
countryName = c.CountryName
}
Но я получаю эту ошибку при выполнении его:
Не мог бросить тип 'Система. Int32' для ввода 'Системы. Объект'. LINQ к Объектам только поддерживает типы примитивов Модели данных Объекта кастинга.
CountryID int
тип и TwoDigitCode string
ввести.
Как я конкатенирую правильно?
Если эта ошибка не дает вам продвинуться вперед и представляет собой небольшой набор данных, вы можете получить данные из базы данных путем перечисления запроса (вызов ToList). С этого момента ваши операции будут выполняться с объектами в памяти, и вы можете не столкнуться с ошибкой, которую получаете.
var countries = (from c in Country
where c.IsActive.Equals(true)
orderby c.CountryName
select c).ToList();
var countryCodes = (from c in countries
where c.IsActive.Equals(true)
orderby c.CountryName
select new
{
countryIDCode = c.CountryID + "|" + c.TwoDigitCode,
countryName = c.CountryName
});
Это ограничение старой версии Entity Framework. Думаю, что с v4 это решено. Для вашей версии обходной путь - преобразовать результат в перечислимое:
from a in
(from c in Country
where c.IsActive.Equals(true)
orderby c.CountryName).AsEnumerable()
select new
{
countryIDCode = a.CountryID + "|" + a.TwoDigitCode,
countryName = a.CountryName
}
В этом разделе содержится список методов CLR, которые можно преобразовать в канонические функции дерева команд и выполнить на сервере:
Для методов CLR, которых нет в этом списке, вы должны иметь чтобы передать результаты клиенту с помощью .AsEnumerable () и выполнить запрос LINQ to Objects.
Используйте c.CountryId.ToString ()
, чтобы получить строковое представление вашего CountryId и объединить его с полем TwoDigitCode:
from c in Country
where c.IsActive.Equals(true)
orderby c.CountryName
select new
{
countryIDCode = c.CountryID.ToString() + "|" + c.TwoDigitCode,
countryName = c.CountryName
}
Надеюсь, ваша ошибка на самом деле является ошибкой компилятора (не могу представить в любом случае компилятор разрешит этот запрос (хотя я не уверен, откуда он знает о части Linq to Entities).
Нет отображения канонической функции для int в преобразование строки .
Просто верните Int и String в двух разных столбцах , а затем объедините их в .NET после использования AsEnumerable
метод:
var cListTemp = from c in Country
where c.IsActive.Equals(true)
orderby c.CountryName
select new
{
countryID = c.CountryID,
twoDigitCode = c.TwoDigitCode,
countryName = c.CountryName
};
var cList = cListTemp.AsEnumerable().Select(c => new {
countryIDCode = c.countryID + "|" + c.twoDigitCode,
countryName = c.countryName
});
Если вам нужно объединить их в строку, вы можете использовать String.Format метод:
countryIDCode = String.Format("{0}|{1}", c.CountryID, c.TwoDigitCode)