public List <SalesInvoice> GetSalesInvoices(QueryOptions queryOptions, PrimeActs.Domain.ViewModels.Invoice.SearchObject searchObject, out int totalCount)
 {
     totalCount = 0;
     return
         (_repository.Query(GetSearchCriteria(searchObject))
          .Include(inc => inc.SalesInvoiceItems.Select(incp => incp.TicketItem.Ticket.Division.Company))
          .Include(inc => inc.CustomerDepartment.Customer)
          .OrderBy(GetOrder(queryOptions.SortField, queryOptions.SortOrder))
          .SelectPage(queryOptions.CurrentPage, queryOptions.PageSize, out totalCount)
          .ToList());
 }
        private Expression <Func <SalesInvoice, bool> > GetSearchCriteria(PrimeActs.Domain.ViewModels.Invoice.SearchObject searchObject)
        {
            Expression <Func <SalesInvoice, bool> > mainCriteria = c => c.SalesInvoiceItems.Any(x => x.TicketItem.Ticket.IsCashSale == false);

            if (!string.IsNullOrEmpty(searchObject.SalesInvoiceReference))
            {
                mainCriteria = mainCriteria.And(c => c.SalesInvoiceReference.StartsWith(searchObject.SalesInvoiceReference));
            }
            if (!string.IsNullOrEmpty(searchObject.SalesInvoiceReference))
            {
                mainCriteria = mainCriteria.And(c => c.CustomerDepartment.CustomerDepartmentName.StartsWith(searchObject.CustomerDepartmentName));
            }
            if (!string.IsNullOrEmpty(searchObject.TicketReference))
            {
                mainCriteria = mainCriteria.And(c => c.SalesInvoiceItems.Any(y => y.TicketItem.Ticket.TicketReference.StartsWith(searchObject.TicketReference)));
            }
            if (!string.IsNullOrEmpty(searchObject.ConsignmentReference))
            {
                mainCriteria = mainCriteria.And(c => c.SalesInvoiceItems.Any(y => y.TicketItem.ConsignmentItem.Consignment.ConsignmentReference.StartsWith(searchObject.ConsignmentReference)));
            }

            if (!string.IsNullOrEmpty(searchObject.SalesInvoiceReference))
            {
                mainCriteria = mainCriteria.And(c => c.CustomerDepartment.CustomerDepartmentName.StartsWith(searchObject.CustomerDepartmentName));
            }

            if (searchObject.FromDate.HasValue)
            {
                mainCriteria = mainCriteria.And(c => c.CreatedDate.Value >= searchObject.FromDate.Value);
            }
            if (searchObject.ToDate.HasValue)
            {
                mainCriteria = mainCriteria.And(c => c.CreatedDate.Value <= searchObject.ToDate.Value);
            }
            return(mainCriteria);
        }