mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 ISelect.OrderByRandom() 随机排序适配;
This commit is contained in:
parent
ad4fa26818
commit
cd6fd2708e
@ -512,5 +512,14 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||||
|
<summary>
|
||||||
|
批量注入 Repository,可以参考代码自行调整
|
||||||
|
</summary>
|
||||||
|
<param name="services"></param>
|
||||||
|
<param name="globalDataFilter"></param>
|
||||||
|
<param name="assemblies"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -892,6 +892,17 @@ namespace FreeSql.Tests.MySqlConnector
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM `tb_topic` a
|
||||||
|
ORDER BY rand()
|
||||||
|
limit 0,10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -818,6 +818,16 @@ namespace FreeSql.Tests.Odbc.Dameng
|
|||||||
{
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT t.* FROM (SELECT 1
|
||||||
|
FROM ""TB_TOPIC22"" a
|
||||||
|
ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -783,6 +783,17 @@ namespace FreeSql.Tests.Odbc.KingbaseES
|
|||||||
{
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM ""TB_TOPIC22"" a
|
||||||
|
ORDER BY random()
|
||||||
|
limit 10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -903,6 +903,17 @@ namespace FreeSql.Tests.Odbc.MySql
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM `tb_topic` a
|
||||||
|
ORDER BY rand()
|
||||||
|
limit 0,10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -819,6 +819,16 @@ namespace FreeSql.Tests.Odbc.Oracle
|
|||||||
{
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT t.* FROM (SELECT 1
|
||||||
|
FROM ""TB_TOPIC22"" a
|
||||||
|
ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -879,6 +879,17 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM ""tb_topic"" a
|
||||||
|
ORDER BY random()
|
||||||
|
limit 10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -774,6 +774,16 @@ namespace FreeSql.Tests.Odbc.SqlServer
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT TOP 10 1
|
||||||
|
FROM [tb_topic22] a
|
||||||
|
ORDER BY newid()", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -832,6 +832,16 @@ namespace FreeSql.Tests.Dameng
|
|||||||
{
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT t.* FROM (SELECT 1
|
||||||
|
FROM ""TB_TOPIC22"" a
|
||||||
|
ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -819,6 +819,16 @@ namespace FreeSql.Tests.Firebird
|
|||||||
{
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT FIRST 10 1
|
||||||
|
FROM ""TB_TOPIC22"" a
|
||||||
|
ORDER BY rand()", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -783,6 +783,17 @@ namespace FreeSql.Tests.KingbaseES
|
|||||||
{
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM ""TB_TOPIC22"" a
|
||||||
|
ORDER BY random()
|
||||||
|
limit 10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -955,6 +955,17 @@ LEFT JOIN `TestTypeParentInfo` a__Type__Parent ON a__Type__Parent.`Id` = a__Type
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM `tb_topic` a
|
||||||
|
ORDER BY rand()
|
||||||
|
limit 0,10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -819,6 +819,16 @@ namespace FreeSql.Tests.Oracle
|
|||||||
{
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT t.* FROM (SELECT 1
|
||||||
|
FROM ""TB_TOPIC22"" a
|
||||||
|
ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -896,6 +896,17 @@ namespace FreeSql.Tests.PostgreSQL
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM ""tb_topic"" a
|
||||||
|
ORDER BY random()
|
||||||
|
limit 10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -897,6 +897,17 @@ namespace FreeSql.Tests.ShenTong
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM ""TB_TOPIC"" a
|
||||||
|
ORDER BY random()
|
||||||
|
limit 10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -830,6 +830,16 @@ namespace FreeSql.Tests.SqlServer
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT TOP 10 1
|
||||||
|
FROM [tb_topic22] a
|
||||||
|
ORDER BY newid()", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -800,6 +800,17 @@ namespace FreeSql.Tests.Sqlite
|
|||||||
{
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void OrderByRandom()
|
||||||
|
{
|
||||||
|
var t1 = select.OrderByRandom().Limit(10).ToSql("1");
|
||||||
|
Assert.Equal(@"SELECT 1
|
||||||
|
FROM ""tb_topic22"" a
|
||||||
|
ORDER BY random()
|
||||||
|
limit 0,10", t1);
|
||||||
|
var t2 = select.OrderByRandom().Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset()
|
public void Skip_Offset()
|
||||||
{
|
{
|
||||||
|
@ -579,4 +579,44 @@ SELECT ");
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region OrderBy Random 随机排序
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 随机排序<para></para>
|
||||||
|
/// 支持:MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/金仓/神通<para></para>
|
||||||
|
/// 不支持:MsAcess
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static TSelect OrderByRandom<TSelect, T1>(this ISelect0<TSelect, T1> that) where TSelect : class
|
||||||
|
{
|
||||||
|
var s0p = that as Select0Provider;
|
||||||
|
switch (s0p._orm.Ado.DataType)
|
||||||
|
{
|
||||||
|
case DataType.MySql:
|
||||||
|
case DataType.OdbcMySql:
|
||||||
|
return that.OrderBy("rand()");
|
||||||
|
case DataType.SqlServer:
|
||||||
|
case DataType.OdbcSqlServer:
|
||||||
|
return that.OrderBy("newid()");
|
||||||
|
case DataType.PostgreSQL:
|
||||||
|
case DataType.OdbcPostgreSQL:
|
||||||
|
case DataType.KingbaseES:
|
||||||
|
case DataType.OdbcKingbaseES:
|
||||||
|
case DataType.ShenTong:
|
||||||
|
return that.OrderBy("random()");
|
||||||
|
case DataType.Oracle:
|
||||||
|
case DataType.Dameng:
|
||||||
|
case DataType.OdbcOracle:
|
||||||
|
case DataType.OdbcDameng:
|
||||||
|
return that.OrderBy("dbms_random.value");
|
||||||
|
case DataType.Sqlite:
|
||||||
|
return that.OrderBy("random()");
|
||||||
|
//case DataType.MsAccess:
|
||||||
|
// return that.OrderBy("rnd()");
|
||||||
|
case DataType.Firebird:
|
||||||
|
return that.OrderBy("rand()");
|
||||||
|
}
|
||||||
|
throw new NotSupportedException($"{s0p._orm.Ado.DataType} 不支持 OrderByRandom 随机排序");
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -4495,6 +4495,14 @@
|
|||||||
<param name="level">递归层级</param>
|
<param name="level">递归层级</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSqlGlobalExtensions.OrderByRandom``2(FreeSql.ISelect0{``0,``1})">
|
||||||
|
<summary>
|
||||||
|
随机排序<para></para>
|
||||||
|
支持:MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/金仓/神通<para></para>
|
||||||
|
不支持:MsAcess
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``1(System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``1(System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
||||||
<summary>
|
<summary>
|
||||||
使用 and 拼接两个 lambda 表达式
|
使用 and 拼接两个 lambda 表达式
|
||||||
|
Loading…
x
Reference in New Issue
Block a user