Browse Source

Performance optimization

pull/12/head
sunkaixuna 3 years ago
parent
commit
8c1d744fd3
  1. 14
      Src/Asp.Net/SqlSugar/Entities/JoinMapper.cs
  2. 98
      Src/Asp.Net/SqlSugar/Infrastructure/Mapper.cs
  3. 1
      Src/Asp.Net/SqlSugar/SqlSugar.csproj

14
Src/Asp.Net/SqlSugar/Entities/JoinMapper.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
{
internal class JoinMapper
{
public string asName { get; set; }
public string dbName { get; set; }
}
}

98
Src/Asp.Net/SqlSugar/Infrastructure/Mapper.cs

@ -20,85 +20,45 @@ namespace SqlSugar
var veiwModel = _context.EntityMaintenance.GetEntityInfo<TResult>();
var exp = (queryBuilder.JoinExpression as LambdaExpression);
List<KeyValuePair<string, object>> selectItems = new List<KeyValuePair<string, object>>();
foreach (var viewColumn in veiwModel.Columns)
{
var exParsmeters = exp.Parameters.Select(it => new { shortName = it.Name, type = it.Type }).ToList();
foreach (var expPars in exParsmeters)
{
var columns = _context.EntityMaintenance.GetEntityInfo(expPars.type).Columns.Where(it => it.IsIgnore == false);
var joinModelDbColumns = columns.Select(it =>
new { asName = it.PropertyName, dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
var joinModelProperties = columns.Select(it =>
new { asName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type), dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
var joinModelDbColumnsWithType = columns.Select(it =>
new { asName = (expPars.type.Name + it.PropertyName), dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
var joinModelPropertiesWithTye = columns.Select(it =>
new { asName = (expPars.type.Name + _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type)), dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
var joinModelDbColumns_WithType = columns.Select(it =>
new { asName = (expPars.type.Name +"_"+ it.PropertyName), dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
var joinModelProperties_WithType = columns.Select(it =>
new { asName = (expPars.type.Name +"_"+ _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type)), dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
var joinModelDbColumnsWithSN = columns.Select(it =>
new { asName = (expPars.shortName + it.PropertyName), dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
var joinModelPropertiesWithSN = columns.Select(it =>
new { asName = (expPars.shortName + _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type)), dbName = _context.EntityMaintenance.GetDbColumnName(it.PropertyName, expPars.type) }).ToList();
if (joinModelDbColumns.Any(it => it.asName.Equals(viewColumn.PropertyName,StringComparison.CurrentCultureIgnoreCase)))
foreach (var viewColumns in veiwModel.Columns)
{
var value = joinModelDbColumns.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName,value));
break;
}
if (joinModelProperties.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
var isbreak = false;
foreach (var expPars in exParsmeters)
{
var value = joinModelProperties.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName, value));
break;
}
if (joinModelDbColumnsWithType.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
if (isbreak)
{
var value = joinModelDbColumnsWithType.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName, value));
break;
}
if (joinModelPropertiesWithTye.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
var entityInfo = _context.EntityMaintenance.GetEntityInfo(expPars.type);
var columns = entityInfo.Columns.Where(it => it.IsIgnore == false);
var list = columns.Select(it => {
var array = new string[]
{
var value = joinModelPropertiesWithTye.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName, value));
break;
}
it.PropertyName,
it.DbColumnName,
if (joinModelDbColumns_WithType.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
{
var value = joinModelDbColumns_WithType.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName, value));
break;
}
if (joinModelProperties_WithType.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
{
var value = joinModelProperties_WithType.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName, value));
break;
}
if (joinModelDbColumnsWithSN.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
expPars.type.Name+it.PropertyName,
expPars.type.Name+it.DbColumnName,
expPars.type.Name+"_"+it.PropertyName,
expPars.type.Name+"_"+it.DbColumnName,
expPars.shortName+it.PropertyName,
expPars.shortName+it.DbColumnName,
};
return new { it, array };
}).ToList();
var columnInfo= list.FirstOrDefault(y => y.array.Select(z=>z.ToLower()).Contains(viewColumns.PropertyName.ToLower()));
if (columnInfo != null)
{
var value = joinModelDbColumnsWithSN.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName, value));
break;
}
if (joinModelPropertiesWithSN.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
JoinMapper joinMapper = new JoinMapper()
{
var value = joinModelPropertiesWithSN.First(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase));
if (viewColumn.PropertyName.Equals(value.asName, StringComparison.CurrentCultureIgnoreCase))
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName, value));
break;
asName=viewColumns.PropertyName,
dbName=columnInfo.it.DbColumnName
};
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName,joinMapper));
isbreak = true;
}
}
}

1
Src/Asp.Net/SqlSugar/SqlSugar.csproj

@ -96,6 +96,7 @@
<Compile Include="Abstract\FilterProvider\FilterProvider.cs" />
<Compile Include="Abstract\SaveableProvider\StorageableDataTable.cs" />
<Compile Include="Abstract\SugarProvider\SqlSugarCoreProvider.cs" />
<Compile Include="Entities\JoinMapper.cs" />
<Compile Include="ExpressionsToSql\Subquery\SubTemplate.cs" />
<Compile Include="ExpressionsToSql\Subquery\SubqueryableN.cs" />
<Compile Include="Interface\IFastBuilder.cs" />

Loading…
Cancel
Save