У меня следующая проблема: я хочу отобразить Билеты из системы поддержки в аккуратном обзоре. Я также хочу отображать сводные данные, например, группировки по приоритетам и категориям. Кроме того, те же данные должны быть превращены в документ .pdf.
Я получаю данные в несколько шагов. Шаг первый - необработанные данные, которые являются основой для .pdf, резюме и фактического обзора. Таким образом, я гарантирую, что они принимают те же данные. После создания .pdf я непосредственно прочитал данные. Резюме составлены путем сглаживания данных. Обзор создается путем извлечения страницы из 25 записей из данных и размещения полей в сетке.
Проблема в
IQueryable<RelationHoursTicketItem> HoursByTicket =
from Ticket t in allTickets
let hours = t.Bezoekrapport.Urens.
Where(h =>
(dateFrom == null || h.Datum >= dateFrom)
&& (dateTo == null || h.Datum <= dateTo)
&& h.Uren1 > 0)
select new RelationHoursTicketItem
{
Date = t.DatumCreatie,
DateSolved = new DateTime(2012, 11, 11),
Ticket = t,
Relatie = t.Relatie,
TicketNr = t.Id,
TicketName = t.Titel,
TicketCategorie = t.TicketCategorie,
TicketPriority = t.TicketPrioriteit,
TicketRemark = t.TicketOpmerkings.SingleOrDefault(tr => tr.IsOplossing)
};
Проблема в TicketRemark. Как только я выполняю данные, я получаю десятки подзапросов, поскольку TicketOpmerkings - голландский для TicketRemarks - извлекается один за другим . Первоначально предполагалось создать IQueryable, который послужил бы основой для всех остальных запросов. Для этого я проделал большую работу, создавая собственные выражения для вычисления определенных полей, которые я вырезал из этого примера.
Каков наилучший из возможных подходов? Написание выражений для всех этих ссылок, таких как t.TicketOpmerkingen? Это позволит удалить некоторые из лучших функциональных возможностей LINQ. Решения, которые я видел до сих пор, включают ручное создание выражений, но затем я могу также отказаться от этого подхода и сделать несколько запросов, каждый для своего конкретного назначения. Затем я оставил аккуратный «многоуровневый» подход LINQ и IQueryable.
У кого-нибудь есть опыт?