powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF6 динамическое применение условий во всех таблицах
25 сообщений из 222, страница 1 из 9
EF6 динамическое применение условий во всех таблицах
    #39730060
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я использую EF6 db first. в модель данных загружено несколько таблиц в каждой из которых имеется столбец [user],
необходимо реализовать возможность динамического получения всех доступных таблиц в datacontext,каждой из них прописать условие

datacontext.t1.Where(row=>row.User=="user")
datacontext.t2.Where(row=>row.User=="user")
datacontext.t3.Where(row=>row.User=="user")

но заранее не зная о t1,t2 и t3
c помощью строки
Код: c#
1.
var tempTable=datacontext.GetType().GetProperty("t1").GetValue(datacontext, null)


я получаю экземпляр таблицы t1, но у меня не получается применить к нему linq запрос
Код: c#
1.
tempTable.Where(row=>row.User=="user")


не сработает, так как для where требуется IQuariable<TSource>, tempTable я могу преобразовать только в IQuariable.
подскажите как указать TSource, если по факту его нужно получить динамически, но я не знаю как
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730072
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
навесь (с помощью partial классов) на эти сущности интерфейс IUser, в котором будет свойство string User

дальше можно запрашивать через тип
Код: c#
1.
datacontext.Set<T1Type>.Cast<IUser>().Where(row=>row.User=="user")
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730073
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соответственно, если тип будет заведомо IUser (например чрез констрейнты), то и Cast не потребуется
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730154
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proнавесь (с помощью partial классов) на эти сущности интерфейс IUser, в котором будет свойство string User

дальше можно запрашивать через тип
Код: c#
1.
datacontext.Set<T1Type>.Cast<IUser>().Where(row=>row.User=="user")



А что такое T1Type и где его брать? в этом основной вопрос
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730157
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это тип, набор которых возвращает datacontext.t1

Всё зависит от того, где ты берешь строку "t1". Возможно, там следует переделать, чтобы этот код оперировал типами, а не строками, и вообще - строковое представление свойства - плохой путь, как правило.

А если нужно тупо все таблицы перебрать - то тут достаточно просто перебрать все типы, реализующие IUser
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730161
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Идея в том что я заранее не знаю ни количества таблиц ни их название, знаю только что в каждой есть столбец USER. Я перебираю все таблицы в contexte, но вот как потом к ним обращаться я не понимаю. Через GetValue я получаю DbSet, но в виде object, и мне не ясно как преобразовать из него в класс к которому можно будет сделать запрос where
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730166
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,
View если доступ к базе есть
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730169
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123lex452,
View если доступ к базе есть
Можно поподробнее? доступ есть
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730170
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, но ты можешь по формальному признаку выделить все классы Entity? Например по неймспейсу? Если да - ты можешь их перебрать, дергая каждый раз datacontext.Set<T1Type>, тебе не нужно перебирать свойства контекста для этого.

Далее, ты получаешь DbSet<TypeN>. И если ты не хочешь воспользоваться моим советом сделать интерфейс IUser, ну можно тогда приделать динамический фильтр Where
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730171
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proну можно тогда приделать динамический фильтр WhereПримерно так

Код: c#
1.
.Where(ExpressionWhereOneField("user", "User"))



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
		/// <summary>
		/// Составляет выражение для фильтрации по указанному полю
		/// </summary>
		public static Expression<Func<T, bool>> ExpressionWhereOneField<T>(object value, string fieldName)
		{
			var param = Expression.Parameter(typeof(T));
			return
			  Expression.Lambda<Func<T, bool>>(
				 Expression.Equal(
					Expression.Property(
					  param,
					  fieldName
					  ),
					Expression.Constant(value)
					),
				 param
				 );
		}
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730172
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Опять повторюсь, но я не понимаю что такое T1Type, и откуда мне его взять. Таблицы у меня разноформатные, но есть общий набор столбцов, если это конечно важно.
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730173
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452Опять повторюсь, но я не понимаю что такое T1Type, и откуда мне его взять.Это тип Entity. Тип записи в твоей таблице. Тип, который находится внутри угловых скобочек в твоем IQueryable<>. Так понятно?

Где взять я уже писал. Либо к ним всем приделать интерфейс IUser, а потом выбрать все типы, реализующие этот интерфейс. Либо тупо перебрать все типы, находящиеся в определенном неймспейсе, если в нем нет ничего, кроме нужных тебе Entity
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730175
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452не сработает, так как для where требуется IQuariable<TSource>,О, вот.
T1Type - это твой TSource для таблицы "t1"
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730176
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452Petro123lex452,
View если доступ к базе есть
Можно поподробнее? доступ естья делал в постгри.
Select к системной табле где имена таблиц.
Формируется вьюха
Select user from t1
Union all
Select user from t2
...
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730177
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или какой там тебе кортеж нужен в итоге?
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730178
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123lex452пропущено...

Можно поподробнее? доступ естья делал в постгри.
Select к системной табле где имена таблиц.
Формируется вьюха
Select user from t1
Union all
Select user from t2
...

Это не выход, как я уже писал таблицы не одинаковые и фильтровать нужно каждую по отдельности
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730179
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Prolex452не сработает, так как для where требуется IQuariable<TSource>,О, вот.
T1Type - это твой TSource для таблицы "t1"
Логически я это понимаю, но как его вытащить из контекста я не понимаю
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730181
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452но как его вытащить из контекстаВ принципе, его можно вытащить и из контекста с помощью рефлексии, разобрав твое .GetProperty("t1")
Только сначала объясни, чем тебе не нравятся два других способа?
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730184
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С интерфейсом и фильтром я согласен, буду пробовать. Но как использовать datacontext.Set<T1Type> если я в текущий момент не знаю T1Type, я не понимаю.
Или про какие 2 других способа речь мне не понятно
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730185
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не сложно приведите пример
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730187
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452Если не сложно приведите пример ну приведи пример двух твоих Entity (вместе с неймспейсами), чтобы можно было говорить предметно, используя твои конкретные наименования, а то как-то абстрактными словами у меня не получается донести
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730188
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

public class MyDbContext : DbContext
{
public virtual DbSet<t1Row> t1{ get; set; }
public virtual DbSet<t2Row> t2{ get; set; }
public virtual DbSet<t3Row> t3{ get; set; }
}

кусок контекста

нужно пробежаться по всем DbSet
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730189
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452Это не выход, как я уже писал таблицы не одинаковые и фильтровать нужно каждую по отдельностивсе что делает linq можно сделать на sql.
КОНКРЕТНЕЕ
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730192
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452нужно пробежаться по всем DbSetзачем?
...
Рейтинг: 0 / 0
EF6 динамическое применение условий во всех таблицах
    #39730193
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123lex452нужно пробежаться по всем DbSetзачем?
для отображения пользователю данных отфильтрованных по столбцу User.


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


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