powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Динамический linq
25 сообщений из 39, страница 1 из 2
Динамический linq
    #39612045
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как сделать чтобы выборку из таблицы делать динамически?
обычно пишем например так
Код: c#
1.
db.data.where(d => d.id == 5)


а хотелось бы чтобы таблица была переменной
Код: c#
1.
2.
3.
4.
func (string table)
{
db.getfromtable("table").where(d => d.id == 5)
}


getfromtable это я придумал вымышленный метод
...
Рейтинг: 0 / 0
Динамический linq
    #39612049
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,

обратившись к таблице по текстовому имени, не знаешь какой там тип, чтобы строить LINQ-запрос. невозможно написать такое условие Where(..).

другими словами, как мне пойти взять то, не знаю что, но по известному направлению.

никак.
...
Рейтинг: 0 / 0
Динамический linq
    #39612070
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коляgetfromtable это я придумал вымышленный методперелогинься)
...
Рейтинг: 0 / 0
Динамический linq
    #39612791
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Колякак сделать чтобы выборку из таблицы делать динамически?
обычно пишем например так
Код: c#
1.
db.data.where(d => d.id == 5)


а хотелось бы чтобы таблица была переменной
Код: c#
1.
2.
3.
4.
func (string table)
{
db.getfromtable("table").where(d => d.id == 5)
}


getfromtable это я придумал вымышленный метод

Cделать динамическую фильтрацию к фиксированной таблице имеет смысл - куча примеров в ынтырнете. А вот делать "статическую" фильтрацию к непонятно какой таблице... (разве что по Id). Возможно, Вам требуется не "выборку из таблицы делать динамически", а что-то типа Repository<T>.Get(long id)
...
Рейтинг: 0 / 0
Динамический linq
    #39612847
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachА вот делатьпро это и разговор.
Чел пилит универсальную модель для всего на свете (коммунизм).
Это утопия.
...
Рейтинг: 0 / 0
Динамический linq
    #39613329
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДядя Коля,

обратившись к таблице по текстовому имени, не знаешь какой там тип, чтобы строить LINQ-запрос. невозможно написать такое условие Where(..).

другими словами, как мне пойти взять то, не знаю что, но по известному направлению.

никак.
в этих таблицах будут гарантированные колонки типа id name, их достаточно
...
Рейтинг: 0 / 0
Динамический linq
    #39613358
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,
Linq без EF не имеет смысла.
А ОРМ EF склейкой строк запроса и динамическим sql не занимается.
В любой ветке по бд тебе скажут что диамическй sql это зло.
...
Рейтинг: 0 / 0
Динамический linq
    #39613363
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Дядя Коля,
Linq без EF не имеет смысла.
А ОРМ EF склейкой строк запроса и динамическим sql не занимается.
В любой ветке по бд тебе скажут что диамическй sql это зло.
ну вот есть разные сущности и для них нужно сделать иерархию (связки родитель-сын) и если не использовать динамический то надо кучу кода дублировать, колонки дублировать, а динамически будет одна таблица связей, один код.
...
Рейтинг: 0 / 0
Динамический linq
    #39613395
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,
Схема где?
База должна быть не тупая. С pk, fk, cascade.
Тогда и ОРМ работает.
Если у вас эксель, то ССЗБ.
...
Рейтинг: 0 / 0
Динамический linq
    #39613962
oaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коляв этих таблицах будут гарантированные колонки типа id name, их достаточноВ чем проблема вынести этот id в базовый класс для всех бизнес-объектов?
...
Рейтинг: 0 / 0
Динамический linq
    #39614025
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oakenДядя Коляв этих таблицах будут гарантированные колонки типа id name, их достаточноВ чем проблема вынести этот id в базовый класс для всех бизнес-объектов?
ну это отдельная таблица чтоли будет? в codefirst
...
Рейтинг: 0 / 0
Динамический linq
    #39614060
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oakenДядя Коляв этих таблицах будут гарантированные колонки типа id name, их достаточноВ чем проблема вынести этот id в базовый класс для всех бизнес-объектов?в том что наследования в базе нету. Там нет ООП.
Теоретически есть, но....
...
Рейтинг: 0 / 0
Динамический linq
    #39615695
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123oakenпропущено...
В чем проблема вынести этот id в базовый класс для всех бизнес-объектов?в том что наследования в базе нету. Там нет ООП.
Теоретически есть, но....

И тем не менее - вынести id в базовый класс - нормальная тема.

В базе нету наследования - оно там и не нужно.

Он со своими объектами уже будет работать через базовый класс - и всё будет ок.
...
Рейтинг: 0 / 0
Динамический linq
    #39615696
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коляoakenпропущено...
В чем проблема вынести этот id в базовый класс для всех бизнес-объектов?
ну это отдельная таблица чтоли будет? в codefirst

Нет. Как ты себе это представляешь? ООП отдельно - Таблицы в БД отдельно.
...
Рейтинг: 0 / 0
Динамический linq
    #39615698
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя КоляhVosttДядя Коля,

обратившись к таблице по текстовому имени, не знаешь какой там тип, чтобы строить LINQ-запрос. невозможно написать такое условие Where(..).

другими словами, как мне пойти взять то, не знаю что, но по известному направлению.

никак.
в этих таблицах будут гарантированные колонки типа id name, их достаточно

Только на будущее рекомендовал бы сделать базовый класс с ID, от него отнаследовать NAME, а от этого уже всё остальное.
...
Рейтинг: 0 / 0
Динамический linq
    #39615720
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Т.е. вы одобрямс вот это:
db.getfromtable("table")....?
ОК.
Пусть делает).
...
Рейтинг: 0 / 0
Динамический linq
    #39615722
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Агнец за бортом,
Т.е. вы одобрямс вот это:
db.getfromtable("table")....?
ОК.
Пусть делает).

Для целей ТС есть паттерн репозиторий и дженерики.

repo.getFromTable<Т>().where....
...
Рейтинг: 0 / 0
Динамический linq
    #39615727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Да. Но это уже не совсем ОРМ классика и EF.
Как динамический sql со склейкой строк чётко отличается от обычного sql.
Это недалеко ушло от:
context.db.connection.command.runSql("select aaaaaaa..
Паттерны есть на всё. Даже на Г.код. (с)
))) Имхо
...
Рейтинг: 0 / 0
Динамический linq
    #39615729
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Не понимаю. Это EF. Типизация сохраняется и работает.

EF через контекст сама реализует доступ via generics.

Насчёт "классики"...

"Нет, пока один работаю"))
...
Рейтинг: 0 / 0
Динамический linq
    #39615735
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Ну дак
ContextDb.ИмяСущности
Проще наверно для программирования чем репо?
2. EF отслеживает изменения при репо?
...
Рейтинг: 0 / 0
Динамический linq
    #39615746
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Агнец за бортом,

2. EF отслеживает изменения при репо?

Мы с тобой о разных вещах наверное говорим. EF никуда не девается, репо - это просто обёртка вокруг EF.

EF сама предоставляет db.Set<entity>, так что можно и без репозитория, просто в приличных домах работа с бд - это не только получение списка.

Не скажу, что мой код репозитория прямо 500 кило, но экрана два кода он занимает.
...
Рейтинг: 0 / 0
Динамический linq
    #39615769
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомEF никуда не девается, репо - это просто обёртка вокруг EF.на хабре флеймов полно - занафига делать обертку, если паттерн уже внутри EF.

Агнец за бортомпросто в приличных домах работа с бд - это не только получение списка.
Согласен. Только я начинаю от простого к сложному.
И тут не понимаю, как можно писать ИС не зная заранее имя таблицы, сущности и предметной области.
А если знаем, то:
Context. И после точки они появляются.
Никакой динамики.
...
Хотя вы правы, жизнь сложнее в общих случаях.
...
Рейтинг: 0 / 0
Динамический linq
    #39615887
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,
как то так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 public static IQueryable func(this DwhContext context, string table)
        {
            var type = context.GetType();
            var tab = type.GetProperty(table);
            var prop = tab.GetValue(context) as IQueryable;
            var e = prop.Expression;
            var t = prop.ElementType;
            var expr = MakeExpression(t);
            var qt = typeof(Queryable).GetMethods()
                .FirstOrDefault(x => x.Name == "Where" && x.GetParameters().Length == 2)
                .MakeGenericMethod(t);
            var res = Expression.Call(qt,e, expr);
            var tmp = Expression.Lambda(res).Compile().DynamicInvoke();
            return tmp as IQueryable;
        }
        static Expression MakeExpression(Type t)
        {
            var par = Expression.Parameter(t, "x");
            var id = t.GetProperty("Id");
            var left = Expression.MakeMemberAccess(par, id);
            var rigth = Expression.Constant(5);
            var body = Expression.Equal(left, rigth);
            var lambda = Expression.Lambda(body, par);
            return lambda;
        }
...
Рейтинг: 0 / 0
Динамический linq
    #39615894
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
А потом к нему
GetFieldByName()
))
...
Рейтинг: 0 / 0
Динамический linq
    #39615926
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ЕвгенийВ,
А потом к нему
GetFieldByName()
))
В автоматической кодогенерации нормальная тема
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Динамический linq
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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