mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-28 16:37:58 +08:00
Performance optimization
This commit is contained in:
parent
0034f2703a
commit
8c1d744fd3
14
Src/Asp.Net/SqlSugar/Entities/JoinMapper.cs
Normal file
14
Src/Asp.Net/SqlSugar/Entities/JoinMapper.cs
Normal file
@ -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; }
|
||||
}
|
||||
}
|
@ -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 viewColumns in veiwModel.Columns)
|
||||
{
|
||||
var exParsmeters = exp.Parameters.Select(it => new { shortName = it.Name, type = it.Type }).ToList();
|
||||
var isbreak = false;
|
||||
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 (isbreak)
|
||||
{
|
||||
break;
|
||||
}
|
||||
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[]
|
||||
{
|
||||
it.PropertyName,
|
||||
it.DbColumnName,
|
||||
|
||||
if (joinModelDbColumns.Any(it => it.asName.Equals(viewColumn.PropertyName,StringComparison.CurrentCultureIgnoreCase)))
|
||||
{
|
||||
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 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)))
|
||||
{
|
||||
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 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;
|
||||
}
|
||||
expPars.type.Name+it.PropertyName,
|
||||
expPars.type.Name+it.DbColumnName,
|
||||
|
||||
if (joinModelDbColumns_WithType.Any(it => it.asName.Equals(viewColumn.PropertyName, StringComparison.CurrentCultureIgnoreCase)))
|
||||
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 = 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)))
|
||||
{
|
||||
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)))
|
||||
{
|
||||
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;
|
||||
JoinMapper joinMapper = new JoinMapper()
|
||||
{
|
||||
asName=viewColumns.PropertyName,
|
||||
dbName=columnInfo.it.DbColumnName
|
||||
};
|
||||
selectItems.Add(new KeyValuePair<string, object>(expPars.shortName,joinMapper));
|
||||
isbreak = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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…
Reference in New Issue
Block a user