powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите составить выражение.
6 сообщений из 6, страница 1 из 1
Помогите составить выражение.
    #39177516
ughunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В библиотеке (по данным рефлектора) имеется следующее:

Код: c#
1.
2.
3.
4.
5.
public IList<T> AllIncluding<T>(params Expression<Func<T, object>>[] includeProperties) where T : class
        {
            return includeProperties.Aggregate<Expression<Func<T, object>>,
                IQueryable<T>>(Context.Set<T>(), (current, includeProperty) => current.Include(includeProperty)).ToList();
        }



Нужно в контроллере дергать данные примерно так:

Код: c#
1.
2.
IList<Document> documents = Repository.Documents
                    .AllIncluding<Document>(a => a.Status, a => a.Type, a => a.Customer.Id == customerId);



но увы! так не получается. Помогите составить выражение, чтобы включались модели Status и Type и отбор велся по условию a.Customer.Id == customerId

Студия пишет следующее:
MSVS2015Выражение пути поиска Include должно ссылаться на свойство навигации, определенное в типе. Используйте точечные пути в свойствах навигации ссылки, а также используйте оператор Select для свойств навигации коллекции.\r\nИмя параметра: path
...
Рейтинг: 0 / 0
Помогите составить выражение.
    #39178361
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ughunter,

по условию нельзя.

используй проекции.
...
Рейтинг: 0 / 0
Помогите составить выражение.
    #39178364
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ughunter,

точнее по условию можно, но не через инструкцию Include, а через инструкцию Load через DbContext, что заставляет вывернуть наружу кишки доступа к данным.

в целом, нормальное включение по условию выполнить нельзя адекватным способом, поэтому...

используй проекции
...
Рейтинг: 0 / 0
Помогите составить выражение.
    #39186640
ughunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttughunter,

точнее по условию можно, но не через инструкцию Include, а через инструкцию Load через DbContext, что заставляет вывернуть наружу кишки доступа к данным.

в целом, нормальное включение по условию выполнить нельзя адекватным способом, поэтому...

используй проекции

буквально в 2х словах: что есть "проекции"??
...
Рейтинг: 0 / 0
Помогите составить выражение.
    #39186645
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ughunterбуквально в 2х словах: что есть "проекции"??

Буквально на примере:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var projectionResult = dbContext.Employees.Select(p => new 
  { 
     p.Id, 
     p.Name, 
     SalaryAmount = p.Salaries
       .Where(x => x.IsPrimary && x.Expired == null)
       .Select(x => x.Amount).FirstOrDefault(),
     Bonuses = p.Bonuses
       .Where(x => x.IsActive)
       .Select(x => new { x.Id, x.Name, x.Value })
       .ToList()
  })
  .ToList();



В projectionResult у тебя резальтат проекции, выполненный одним запросом со всеми необходимыми данными внутри, которые правильно отфильтрованы.

Автоматизировать и упростить это дело можно с AutoMapper (расширение ProjectTo).
...
Рейтинг: 0 / 0
Помогите составить выражение.
    #39186660
ughunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

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


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