Пример #1
0
        public async Task <Tuple <List <MaintenanceInfoResponse>, int> > GetPageListAsync(MaintenanceInfoPageRequest request)
        {
            StringBuilder     sbSql      = new StringBuilder();
            StringBuilder     sbCount    = new StringBuilder();
            DynamicParameters parameters = new DynamicParameters();

            sbSql.Append(@" SELECT * FROM maintenanceinfo m 
                            LEFT JOIN servicebusiness s ON m.RepairId = s.Id
                            LEFT JOIN attachment a ON m.Id = a.DataId AND a.IsDeleted = 0 AND a.DataType = 1 
                            WHERE 1=1 ");
            sbCount.Append(" SELECT COUNT(*) FROM maintenanceinfo m WHERE 1=1 ");
            var where = this.GetWhere(request, parameters);
            if (where?.Item1?.Length > 0)
            {
                sbSql.Append(where.Item1);
                sbCount.Append(where.Item1);
            }
            //添加排序
            sbSql.Append(" Order By m.CreationTime DESC ");
            if (request.Count.HasValue && request.Count.Value > 0)
            {
                sbSql.Append(" LIMIT @Skip,@Count ");
                parameters.Add("@Skip", request.Skip.Value);
                parameters.Add("@Count", request.Count.Value);
            }
            using (ReadConnection)
            {
                var lookup = new Dictionary <Guid, MaintenanceInfoResponse>();
                var query  = ReadConnection.Query <MaintenanceInfoResponse, ServiceBusiness, Attachment, List <MaintenanceInfoResponse> >(sbSql.ToString(), (a, c, b) =>
                {
                    if (!lookup.Keys.Contains(a.Id))
                    {
                        if (a != null && c != null)
                        {
                            a.ServiceBusiness = c;
                        }
                        lookup.Add(a.Id, a);
                        if (lookup[a.Id].Attachments == null)
                        {
                            lookup[a.Id].Attachments = new List <Attachment>();
                        }
                        lookup[a.Id].Attachments.Add(b);
                    }
                    else
                    {
                        lookup[a.Id].Attachments.Add(b);
                    }
                    return(lookup.Values.ToList());
                }, parameters);


                int r2 = 0;
                if (request.Count.HasValue && request.Count.Value > 0)
                {
                    r2 = await ReadConnection.QueryFirstAsync <int>(sbCount.ToString(), parameters);
                }
                return(new Tuple <List <MaintenanceInfoResponse>, int>(lookup.Values.ToList(), r2));
            }
        }