![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
KuMa1104 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Здравствуйте SQL запрос возврашает таблицу с данными. Я хочу чтобы эти данные отображались в виде некой сушности TestSelect, нужно как то указать ему что нужно использовать ее (в БД НЕТ ТАКОЙ СУШНОСТИ она просто для удобства), как это сделать?
-------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
erm0l0v |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Вы можете воспользоваться какой нибудь ORM например LinqToSQL или EntityFramework тогда все сущности будут сгенерированны автоматически.
Так же вы можете получить результат запроса в виде DataTable и потом преобразовать в коллекцию сущностей. Если не хотите подключать тяжелую ORM или возиться с DataTable можно попробовать такой вариант:
здесь результат запроса жестко преобразуется в коллекцию определенных сущностей. Но вы можете заделать и более универсальную функцию используя dynamic или передавать в функцию тип коллекции и проинициализировать её с помощью рефлекшна. Добавлено через 13 минут и 22 секунды Сори, не увидел сразу в названии вашей темы nhibernate))) Неужели там нет такой функциональности в LinqToSQL и EntityFramework это есть. Например в LinqToSQL это будет выглядеть так:
LinqToSQL с помощью рефлекшна преобразует результат запроса в коллекцию типа T, возможно в nhibernate есть что то подобное... Это сообщение отредактировал(а) erm0l0v - 6.6.2012, 08:20 |
||||
|
|||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Да есть query.List<System.Object[]>() или query.UniqueResult<System.Object[]>(); проблемма в том что если вместо System.Object[] я подставлю свои TestSelect. NHibernate викинет исключение
Unable to cast object of type 'System.Object[]' to type 'Domain.TestSelect'. C ЗАМАПАННОЙ сушностью это работает. Но здесь попрасту не на что мапать, в БД нет таблицы соответствуюшей сушности TestSelect она созданна просто для удобства работы с данными которые возврашает запрос. Это сообщение отредактировал(а) KuMa1104 - 6.6.2012, 15:15 -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Вы можете сделать представление TestSelect, если NHibernate умеет с ними работать.
Попробуйте в запросе с помощью as задать имена возвращаемых строк, по идеи они должны быть QuestionGroupDescription и IsActive но мало ли, может SQL назвал их как то по своему. А query.List<System.Object[]>() возвращает лист из массивов объектов, то есть каждый элемент листа это коллекция полей перечисленных в select? Просто странно что он пытается привести массив объектов к одному объекту. |
|||
|
||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Нашел вот такая штука.
17.1.5. Returning non-managed entities It is possible to apply an IResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities. sess.CreateSQLQuery("SELECT NAME, BIRTHDATE FROM CATS") .SetResultTransformer(Transformers.AliasToBean(typeof(CatDTO))) This query specified: the SQL query string a result transformer The above query will return a list of CatDTO which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields. IMPORTANT: The custom IResultTransformer should override Equals and GetHashCode, otherwise the query translation won't be cached. This also will result in memory leak. Добавлено через 1 минуту и 12 секунд erm0l0v спасибо за советы. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |