Skip to content

Commit 284a991

Browse files
committed
[#235] 支持linq where条件判断
1 parent 015c4d6 commit 284a991

File tree

5 files changed

+51
-1
lines changed

5 files changed

+51
-1
lines changed

benchmarks/ShardingCoreBenchmark/ShardingDbContexts/OrderVirtualTableRoute.cs

+4
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,9 @@ public override void Configure(EntityMetadataTableBuilder<Order> builder)
2121
builder.ShardingProperty(o => o.Id);
2222
}
2323

24+
public override string CompareValueToKey(object shardingKey)
25+
{
26+
return shardingKey.ToString();
27+
}
2428
}
2529
}

samples/Sample.MySql/Controllers/WeatherForecastController.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ public WeatherForecastController(UnShardingDbContext unShardingDbContext,Default
7676

7777
public IQueryable<SysTest> GetAll()
7878
{
79+
var dataSourceRouteManager = _shardingRuntimeContext.GetDataSourceRouteManager();
80+
// dataSourceRouteManager.GetRoute()
81+
var routeManager = _shardingRuntimeContext.GetTableRouteManager();
82+
// routeManager.GetRoute()
83+
7984
// DynamicShardingHelper.DynamicAppendDataSource(_shardingRuntimeContext,"ds9","链接字符串",true,true);
8085
//如果你已经添加好了的情况下并且没有生成对应的库和表想要生成表和库
8186
var dataSourceInitializer = _shardingRuntimeContext.GetDataSourceInitializer();
@@ -84,7 +89,7 @@ public IQueryable<SysTest> GetAll()
8489
// _defaultTableDbContext.ReadWriteSeparationReadOnly();//读库
8590
// _defaultTableDbContext.ReadWriteSeparationWriteOnly();//写库
8691
var shardingTableCreator = _shardingRuntimeContext.GetShardingTableCreator();
87-
var tableRouteManager = _shardingRuntimeContext.GetTableRouteManager();
92+
var tableRouteManager = routeManager;
8893
//系统的时间分片都会实现 ITailAppendable 如果不是系统的自定义的转成你自己的对象即可
8994
var tableRoute = tableRouteManager.GetRoute(typeof(SysUserMod));
9095
var tails = tableRoute.GetTails();

samples/Sample.MySql/Domain/Maps/SysTestMap.cs

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public void Configure(EntityTypeBuilder<SysTest> builder)
1313
builder.Property(o => o.Id).IsRequired().HasMaxLength(128);
1414
builder.Property(o => o.UserId).IsRequired().HasMaxLength(128);
1515
builder.Property(o => o.UserId).IsConcurrencyToken();
16+
builder.HasIndex(o => new { o.Id, o.UserId });
1617
builder.ToTable(nameof(SysTest),"dbdbd0");
1718
}
1819
}

samples/Sample.MySql/Startup.cs

+20
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,25 @@ namespace Sample.MySql
4040
// return Task.CompletedTask;
4141
// }
4242
// }
43+
44+
// public interface ITenant
45+
// {
46+
// string GetTenantId();
47+
// }
48+
//
49+
// public class DefaultTenant :ITenant
50+
// {
51+
// private readonly string _tenantId;
52+
//
53+
// public DefaultTenant(string tenantId)
54+
// {
55+
// _tenantId = tenantId;
56+
// }
57+
// public string GetTenantId()
58+
// {
59+
// return _tenantId;
60+
// }
61+
// }
4362
public class Startup
4463
{
4564
public static readonly ILoggerFactory efLogger = LoggerFactory.Create(builder =>
@@ -69,6 +88,7 @@ public void ConfigureServices(IServiceCollection services)
6988
// optionsBuilder(sp, builder);
7089
// });
7190
//
91+
var type = typeof(MyUserRoute);
7292

7393
services.AddDbContext<UnShardingDbContext>(o =>
7494
o.UseMySql(

src/ShardingCore/Sharding/Visitors/QueryableRouteDiscoverVisitor.cs

+20
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,26 @@ private void CombineEntityLambdaExpression(MethodCallExpression node)
287287
}
288288
}
289289
//todo
290+
else if(lambdaExpression.Parameters[0].Type.IsGenericType&&lambdaExpression.Parameters[0].Type.IsAnonymousType())
291+
{
292+
var typeGenericTypeArguments = lambdaExpression.Parameters[0].Type.GenericTypeArguments;
293+
foreach (var typeGenericTypeArgument in typeGenericTypeArguments)
294+
{
295+
if (typeGenericTypeArgument == _entityMetadata.EntityType)
296+
{
297+
if (_entityLambdaExpression == null)
298+
{
299+
_entityLambdaExpression = lambdaExpression;
300+
}
301+
else
302+
{
303+
var body = Expression.AndAlso(_entityLambdaExpression.Body, lambdaExpression.Body);
304+
var lambda = Expression.Lambda(body, _entityLambdaExpression.Parameters[0]);
305+
_entityLambdaExpression = lambda;
306+
}
307+
}
308+
}
309+
}
290310
}
291311
}
292312
}

0 commit comments

Comments
 (0)