Добавление свойства, которое суммирует результаты запроса в Lightswitch 2012

У меня есть проект, использующий C# в Lightswitch 2012, который имеет следующие таблицы:

клиенты

  • Id - целое число
  • CaseID - длинное целое
  • FullName - String
  • Адрес - Строка
  • Отслеживание - Коллекция TrackingItem

Штат сотрудников

  • Id - целое число
  • PIN - целое число
  • FullName - String
  • Отслеживание - Коллекция TrackingItem

отслеживание

  • Id - целое число
  • Клиент - Клиент
  • Staff - StaffItem
  • StartDate - Дата
  • StartTime - DateTime
  • EndTime - DateTime
  • Units - Double (расчетное поле)
  • TogetherTime - логическое значение

Отношения таковы: у каждого объекта отслеживания должен быть хотя бы один клиент и хотя бы один сотрудник, а у каждого клиента и персонала может быть много объектов отслеживания. В настоящее время у меня есть запрос, называемый TrackingFilter, который позволяет пользователям фильтровать таблицу отслеживания на экране поиска, который называется SearchTrackingFilter, по имени клиента, имени сотрудника, диапазону дат и тому, помечен ли элемент как время вместе. Это также отображает рассчитанное поле "Единицы" в таблице результатов. То, что я пытаюсь сделать, это добавить текстовое поле на экран над таблицей результатов, которое показывает общее количество единиц, которые запрос возвратил по любым критериям, выбранным пользователем. Я немного застрял на этом этапе и не знаю, что делать. Я могу просто добавить метки и тому подобное на экран, но я не могу отредактировать какой-либо код или что-либо, что позволило бы мне суммировать общее количество единиц, возвращаемых запросом. Любая помощь будет оценена.

1 ответ

У меня было такое же требование. Вы можете получить доступ к DataWorkspace с this.DataWorkspace.ApplicationData и добавьте к нему параметры вашего фильтра.

Например:

IDataServiceQueryable<Invoice> queryInvoiceTotal = this.DataWorkspace.ApplicationData.Invoices;
if (drdCustomer != null)
    queryInvoiceTotal = queryInvoiceTotal.Where(q => q.Customer.Id == this.drdCustomer.Id);
if (InvoiceState != null)
    queryInvoiceTotal = queryInvoiceTotal.Where(q => q.InvoiceState == InvoiceState);
if (InvoiceDateStart != null)
    queryInvoiceTotal = queryInvoiceTotal.Where(q => q.Date >= InvoiceDateStart);
if (InvoiceDateEnd != null)
    queryInvoiceTotal = queryInvoiceTotal.Where(q => q.Date <= InvoiceDateEnd);
var data = queryInvoiceTotal.Execute();
decimal? totalNetto = data.Sum(q => q.SumNetto);

Вы также можете получить доступ к так называемому запросу VisualCollection на экране, но, пожалуйста, обратите внимание, что это только суммирует данные, которые в настоящее время видны на экране / сетке. Так, например, если вы показываете только 45 элементов на странице, это суммирует только эти 45 элементов.

Другие вопросы по тегам