Добавление свойства, которое суммирует результаты запроса в 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 элементов.