powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / В запросе указать переменную типа класс.
10 сообщений из 10, страница 1 из 1
В запросе указать переменную типа класс.
    #38993978
azim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот обычный запрос, с результатом типа ItemClass.
Код: c#
1.
2.
 var sqlQuery = string.Format(@"select * from blabla");
 var rows = _ctx.Database.SqlQuery<ItemClass>(sqlQuery).ToList();



Хотелось бы вместо ItemClass, написать object типа ItemClass.
Чтобы эту переменную object программно переопределять как другой класс.

что-то типа такого:
Код: c#
1.
2.
3.
 var sqlQuery = string.Format(@"select * from blabla");
 object objClass = new ItemClass as object; // привидение типа
 object rows = _ctx.Database.SqlQuery<objClass>(sqlQuery).ToList();
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994002
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем? Мы видим, что метод SqlQuery это уже умеет.
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994021
azim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

задача сделать одну процедуру, которая будет обращаться к разным данным.
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994050
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит надо сделать обобщенную процедуру.
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994062
azim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

значит Database.SqlQuery не может принимать переменные?
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994085
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azim2, и как это будет использоваться дальше?

Можно попробовать dynamic подставить...
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994120
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azim2Shocker.Pro,

значит Database.SqlQuery не может принимать переменные?
Вам предлагают сделать так:
Код: c#
1.
2.
3.
4.
public IList<T> MyProcedure<T>(string queryString)
{
    return _ctx.Database.SqlQuery<T>(queryString).ToList();
}
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994280
azim2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

не совсем то что нужно.

Из внешней системы приходит запрос с названием класса. Должен вернуть некий результат.

Хочется написать по умному:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class AAA
{
   public string ParamA {get;set;}
}

class BBB
{
   public string ParamB {get;set;}
}

void FillData(string sqlQuery, string clsName="AAA")
{
   //clsName className может быть разным, это текстовое наименование класса.
   Assembly testAssembly = Assembly.GetExecutingAssembly();
   Type classType = testAssembly.GetType("MyApp." + clsName);

   object rows = _ctx.Database.SqlQuery<classType>(sqlQuery).ToList();// Здесь  classType выдает ошибку!!!!

}



Либо писать по тупому - длинный switch
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void FillData(string sqlQuery, string clsName="AAA")
{
  switch clsName
  {
     case "AAA":
        rows = _ctx.Database.SqlQuery<AAA>(sqlQuery).ToList();
     case "BBB":
        rows = _ctx.Database.SqlQuery<BBB>(sqlQuery).ToList();

... и т.д. много много case 
  }
}
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994307
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azim2
Код: c#
1.
object rows = _ctx.Database.SqlQuery<classType>(sqlQuery).ToList();


Повторю вопрос: azim2, и как это будет использоваться дальше?

На выходе получился object. А на самом деле это список. Как предполагается работать с ним дальше? Как итерироваться по нему? Какой тип внутри?
Суть генериков в том и состоит: если передали класс AAA, то можем обращаться к свойству ParamA, а если передали класс BBB, то будет доступно свойство ParamB - компилятор не даст ошибиться.

Опять же повторю: если отказаться от статической типизации, то можно использовать dynamic. Хлебаем г... большой ложкой...
...
Рейтинг: 0 / 0
В запросе указать переменную типа класс.
    #38994350
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azim2, а документацию по тому, что используете, читать пробовали?

В частности по методу Database.SqlQuery .
Есть ведь и такая его перегрузка: https://msdn.microsoft.com/ru-ru/library/gg679117(v=vs.113).aspx]SqlQuery(Type, String, Object[]) .

Вот и передавайте туда свой classType .
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / В запросе указать переменную типа класс.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]