mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 .Net Framework 4.0 的支持,出于环境考虑 .Net Framework 4.0 不支持异步方法;
- 增加 IFreeSql.Insert<T>(IEnumerable<T1> source) 方法;
This commit is contained in:
parent
cb3e3b02ef
commit
de8cf9e17d
261
Examples/orm_vs_net40/Program.cs
Normal file
261
Examples/orm_vs_net40/Program.cs
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
//using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace orm_vs
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
|
||||||
|
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=20")
|
||||||
|
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=20")
|
||||||
|
.UseAutoSyncStructure(false)
|
||||||
|
.UseNoneCommandParameter(true)
|
||||||
|
//.UseConfigEntityFromDbFirst(true)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
//static SqlSugarClient sugar
|
||||||
|
//{
|
||||||
|
// get => new SqlSugarClient(new ConnectionConfig()
|
||||||
|
// {
|
||||||
|
// //不欺负,让连接池100个最小
|
||||||
|
// //ConnectionString = "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=20;Max Pool Size=20",
|
||||||
|
// //DbType = DbType.SqlServer,
|
||||||
|
// ConnectionString = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Min Pool Size=20;Max Pool Size=20",
|
||||||
|
// DbType = DbType.MySql,
|
||||||
|
// IsAutoCloseConnection = true,
|
||||||
|
// InitKeyType = InitKeyType.Attribute
|
||||||
|
// });
|
||||||
|
//}
|
||||||
|
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var testlist1 = fsql.Select<Song>().OrderBy(a => a.Id).ToList();
|
||||||
|
var testlist2 = new List<Song>();
|
||||||
|
fsql.Select<Song>().OrderBy(a => a.Id).ToChunk(0, list =>
|
||||||
|
{
|
||||||
|
testlist2.AddRange(list);
|
||||||
|
});
|
||||||
|
|
||||||
|
fsql.CodeFirst.SyncStructure(typeof(Song), typeof(Song_tag), typeof(Tag));
|
||||||
|
//sugar.CodeFirst.InitTables(typeof(Song), typeof(Song_tag), typeof(Tag));
|
||||||
|
//sugar创建表失败:SqlSugar.SqlSugarException: Sequence contains no elements
|
||||||
|
|
||||||
|
//sugar.Aop.OnLogExecuted = (s, e) =>
|
||||||
|
//{
|
||||||
|
// Trace.WriteLine(s);
|
||||||
|
//};
|
||||||
|
//测试前清空数据
|
||||||
|
fsql.Delete<Song>().Where(a => a.Id > 0).ExecuteAffrows();
|
||||||
|
//sugar.Deleteable<Song>().Where(a => a.Id > 0).ExecuteCommand();
|
||||||
|
fsql.Ado.ExecuteNonQuery("delete from efcore_song");
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
Console.WriteLine("插入性能:");
|
||||||
|
Insert(sb, 1000, 1);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Insert(sb, 1000, 10);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
|
||||||
|
Insert(sb, 1, 1000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Insert(sb, 1, 10000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Insert(sb, 1, 50000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Insert(sb, 1, 100000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
|
||||||
|
Console.WriteLine("查询性能:");
|
||||||
|
Select(sb, 1000, 1);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Select(sb, 1000, 10);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
|
||||||
|
Select(sb, 1, 1000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Select(sb, 1, 10000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Select(sb, 1, 50000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Select(sb, 1, 100000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
|
||||||
|
Console.WriteLine("更新:");
|
||||||
|
Update(sb, 1000, 1);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Update(sb, 1000, 10);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
|
||||||
|
Update(sb, 1, 1000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Update(sb, 1, 10000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Update(sb, 1, 50000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
Update(sb, 1, 100000);
|
||||||
|
Console.Write(sb.ToString());
|
||||||
|
sb.Clear();
|
||||||
|
|
||||||
|
Console.WriteLine("测试结束,按任意键退出...");
|
||||||
|
Console.ReadKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Select(StringBuilder sb, int forTime, int size)
|
||||||
|
{
|
||||||
|
Stopwatch sw = new Stopwatch();
|
||||||
|
sw.Restart();
|
||||||
|
for (var a = 0; a < forTime; a++)
|
||||||
|
fsql.Select<Song>().Limit(size).ToList();
|
||||||
|
sw.Stop();
|
||||||
|
sb.AppendLine($"FreeSql Select {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms");
|
||||||
|
|
||||||
|
//sw.Restart();
|
||||||
|
//for (var a = 0; a < forTime; a++)
|
||||||
|
// sugar.Queryable<Song>().Take(size).ToList();
|
||||||
|
//sw.Stop();
|
||||||
|
//sb.AppendLine($"SqlSugar Select {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Insert(StringBuilder sb, int forTime, int size)
|
||||||
|
{
|
||||||
|
var songs = Enumerable.Range(0, size).Select(a => new Song
|
||||||
|
{
|
||||||
|
Create_time = DateTime.Now,
|
||||||
|
Is_deleted = false,
|
||||||
|
Title = $"Insert_{a}",
|
||||||
|
Url = $"Url_{a}"
|
||||||
|
});
|
||||||
|
|
||||||
|
//预热
|
||||||
|
fsql.Insert(songs.First()).ExecuteAffrows();
|
||||||
|
//sugar.Insertable(songs.First()).ExecuteCommand();
|
||||||
|
Stopwatch sw = new Stopwatch();
|
||||||
|
|
||||||
|
sw.Restart();
|
||||||
|
for (var a = 0; a < forTime; a++)
|
||||||
|
{
|
||||||
|
fsql.Insert(songs).ExecuteAffrows();
|
||||||
|
//using (var db = new FreeSongContext()) {
|
||||||
|
// //db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
|
// db.Songs.AddRange(songs.ToArray());
|
||||||
|
// db.SaveChanges();
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
sw.Stop();
|
||||||
|
sb.AppendLine($"FreeSql Insert {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms");
|
||||||
|
|
||||||
|
//sw.Restart();
|
||||||
|
//Exception sugarEx = null;
|
||||||
|
//try
|
||||||
|
//{
|
||||||
|
// for (var a = 0; a < forTime; a++)
|
||||||
|
// sugar.Insertable(songs.ToArray()).ExecuteCommand();
|
||||||
|
//}
|
||||||
|
//catch (Exception ex)
|
||||||
|
//{
|
||||||
|
// sugarEx = ex;
|
||||||
|
//}
|
||||||
|
//sw.Stop();
|
||||||
|
//sb.AppendLine($"SqlSugar Insert {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms" + (sugarEx != null ? $"成绩无效,错误:{sugarEx.Message}" : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Update(StringBuilder sb, int forTime, int size)
|
||||||
|
{
|
||||||
|
Stopwatch sw = new Stopwatch();
|
||||||
|
|
||||||
|
var songs = fsql.Select<Song>().Limit(size).ToList();
|
||||||
|
sw.Restart();
|
||||||
|
for (var a = 0; a < forTime; a++)
|
||||||
|
{
|
||||||
|
fsql.Update<Song>().SetSource(songs).ExecuteAffrows();
|
||||||
|
}
|
||||||
|
sw.Stop();
|
||||||
|
sb.AppendLine($"FreeSql Update {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms");
|
||||||
|
|
||||||
|
//songs = sugar.Queryable<Song>().Take(size).ToList();
|
||||||
|
//sw.Restart();
|
||||||
|
//Exception sugarEx = null;
|
||||||
|
//try
|
||||||
|
//{
|
||||||
|
// for (var a = 0; a < forTime; a++)
|
||||||
|
// sugar.Updateable(songs).ExecuteCommand();
|
||||||
|
//}
|
||||||
|
//catch (Exception ex)
|
||||||
|
//{
|
||||||
|
// sugarEx = ex;
|
||||||
|
//}
|
||||||
|
//sw.Stop();
|
||||||
|
//sb.AppendLine($"SqlSugar Update {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms" + (sugarEx != null ? $"成绩无效,错误:{sugarEx.Message}" : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[FreeSql.DataAnnotations.Table(Name = "freesql_song")]
|
||||||
|
//[SugarTable("sugar_song")]
|
||||||
|
public class Song
|
||||||
|
{
|
||||||
|
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
||||||
|
//[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public int Id { get; set; }
|
||||||
|
public DateTime? Create_time { get; set; }
|
||||||
|
public bool? Is_deleted { get; set; }
|
||||||
|
public string Title { get; set; }
|
||||||
|
public string Url { get; set; }
|
||||||
|
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
public virtual ICollection<Tag> Tags { get; set; }
|
||||||
|
}
|
||||||
|
[FreeSql.DataAnnotations.Table(Name = "freesql_song_tag")]
|
||||||
|
//[SugarTable("sugar_song_tag")]
|
||||||
|
public class Song_tag
|
||||||
|
{
|
||||||
|
public int Song_id { get; set; }
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
public virtual Song Song { get; set; }
|
||||||
|
|
||||||
|
public int Tag_id { get; set; }
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
public virtual Tag Tag { get; set; }
|
||||||
|
}
|
||||||
|
[FreeSql.DataAnnotations.Table(Name = "freesql_tag")]
|
||||||
|
//[SugarTable("sugar_tag")]
|
||||||
|
public class Tag
|
||||||
|
{
|
||||||
|
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
||||||
|
//[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int? Parent_id { get; set; }
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
public virtual Tag Parent { get; set; }
|
||||||
|
|
||||||
|
public decimal? Ddd { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
public virtual ICollection<Song> Songs { get; set; }
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
public virtual ICollection<Tag> Tags { get; set; }
|
||||||
|
}
|
||||||
|
}
|
36
Examples/orm_vs_net40/Properties/AssemblyInfo.cs
Normal file
36
Examples/orm_vs_net40/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// 有关程序集的一般信息由以下
|
||||||
|
// 控制。更改这些特性值可修改
|
||||||
|
// 与程序集关联的信息。
|
||||||
|
[assembly: AssemblyTitle("orm_vs_net40")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("orm_vs_net40")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// 将 ComVisible 设置为 false 会使此程序集中的类型
|
||||||
|
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
|
||||||
|
//请将此类型的 ComVisible 特性设置为 true。
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
|
||||||
|
[assembly: Guid("1674bce3-eeb4-4003-a2a7-06f51efaea23")]
|
||||||
|
|
||||||
|
// 程序集的版本信息由下列四个值组成:
|
||||||
|
//
|
||||||
|
// 主版本
|
||||||
|
// 次版本
|
||||||
|
// 生成号
|
||||||
|
// 修订号
|
||||||
|
//
|
||||||
|
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
|
||||||
|
//通过使用 "*",如下所示:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
67
Examples/orm_vs_net40/orm_vs_net40.csproj
Normal file
67
Examples/orm_vs_net40/orm_vs_net40.csproj
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>orm_vs_net40</RootNamespace>
|
||||||
|
<AssemblyName>orm_vs_net40</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj">
|
||||||
|
<Project>{af9c50ec-6eb6-494b-9b3b-7edba6fd0ebb}</Project>
|
||||||
|
<Name>FreeSql</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MySql\FreeSql.Provider.MySql.csproj">
|
||||||
|
<Project>{28c6a39c-7ae7-4210-b7b0-0970216637a8}</Project>
|
||||||
|
<Name>FreeSql.Provider.MySql</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\Providers\FreeSql.Provider.SqlServer\FreeSql.Provider.SqlServer.csproj">
|
||||||
|
<Project>{b61aac9e-59e9-4f47-bbe3-97ac24112efe}</Project>
|
||||||
|
<Name>FreeSql.Provider.SqlServer</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Newtonsoft.Json">
|
||||||
|
<Version>12.0.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<Version>0.10.14</Version>
|
<Version>0.10.14</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
|
@ -37,7 +37,7 @@ namespace FreeSql.Extensions
|
|||||||
|
|
||||||
that.Aop.ConfigEntityProperty += new EventHandler<Aop.ConfigEntityPropertyEventArgs>((s, e) =>
|
that.Aop.ConfigEntityProperty += new EventHandler<Aop.ConfigEntityPropertyEventArgs>((s, e) =>
|
||||||
{
|
{
|
||||||
if (e.Property.GetCustomAttribute<JsonMapAttribute>(false) != null)
|
if (e.Property.GetCustomAttributes(typeof(JsonMapAttribute), false).Any())
|
||||||
{
|
{
|
||||||
e.ModifyResult.MapType = typeof(string);
|
e.ModifyResult.MapType = typeof(string);
|
||||||
if (_dicTypes.TryAdd(e.Property.PropertyType, true))
|
if (_dicTypes.TryAdd(e.Property.PropertyType, true))
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<Version>0.10.14</Version>
|
<Version>0.10.14</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
|
@ -72,13 +72,13 @@ namespace FreeSql
|
|||||||
var props = _dicGetDbSetProps.GetOrAdd(this.GetType(), tp =>
|
var props = _dicGetDbSetProps.GetOrAdd(this.GetType(), tp =>
|
||||||
tp.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
|
tp.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
|
||||||
.Where(a => a.PropertyType.IsGenericType &&
|
.Where(a => a.PropertyType.IsGenericType &&
|
||||||
a.PropertyType == typeof(DbSet<>).MakeGenericType(a.PropertyType.GenericTypeArguments[0])).ToArray());
|
a.PropertyType == typeof(DbSet<>).MakeGenericType(a.PropertyType.GetGenericArguments()[0])).ToArray());
|
||||||
|
|
||||||
foreach (var prop in props)
|
foreach (var prop in props)
|
||||||
{
|
{
|
||||||
var set = this.Set(prop.PropertyType.GenericTypeArguments[0]);
|
var set = this.Set(prop.PropertyType.GetGenericArguments()[0]);
|
||||||
|
|
||||||
prop.SetValue(this, set);
|
prop.SetValue(this, set, null);
|
||||||
AllSets.Add(prop.Name, set);
|
AllSets.Add(prop.Name, set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,8 +105,6 @@ namespace FreeSql
|
|||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void Add<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().Add(data);
|
public void Add<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().Add(data);
|
||||||
public void AddRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AddRange(data);
|
public void AddRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AddRange(data);
|
||||||
public Task AddAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddAsync(data);
|
|
||||||
public Task AddRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AddRangeAsync(data);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 更新
|
/// 更新
|
||||||
@ -115,8 +113,6 @@ namespace FreeSql
|
|||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void Update<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().Update(data);
|
public void Update<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().Update(data);
|
||||||
public void UpdateRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().UpdateRange(data);
|
public void UpdateRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().UpdateRange(data);
|
||||||
public Task UpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().UpdateAsync(data);
|
|
||||||
public Task UpdateRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().UpdateRangeAsync(data);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除
|
/// 删除
|
||||||
@ -132,7 +128,6 @@ namespace FreeSql
|
|||||||
/// <typeparam name="TEntity"></typeparam>
|
/// <typeparam name="TEntity"></typeparam>
|
||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void AddOrUpdate<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddOrUpdate(data);
|
public void AddOrUpdate<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddOrUpdate(data);
|
||||||
public Task AddOrUpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddOrUpdateAsync(data);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 附加实体,可用于不查询就更新或删除
|
/// 附加实体,可用于不查询就更新或删除
|
||||||
@ -152,6 +147,16 @@ namespace FreeSql
|
|||||||
this.Set<TEntity>().AttachOnlyPrimary(data);
|
this.Set<TEntity>().AttachOnlyPrimary(data);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public Task AddAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddAsync(data);
|
||||||
|
public Task AddRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AddRangeAsync(data);
|
||||||
|
|
||||||
|
public Task UpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().UpdateAsync(data);
|
||||||
|
public Task UpdateRangeAsync<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().UpdateRangeAsync(data);
|
||||||
|
|
||||||
|
public Task AddOrUpdateAsync<TEntity>(TEntity data) where TEntity : class => this.Set<TEntity>().AddOrUpdateAsync(data);
|
||||||
|
#endif
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Queue Action
|
#region Queue Action
|
||||||
|
@ -5,11 +5,12 @@ using System.Reflection;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
namespace FreeSql
|
namespace FreeSql
|
||||||
{
|
{
|
||||||
partial class DbContext
|
partial class DbContext
|
||||||
{
|
{
|
||||||
|
|
||||||
async public virtual Task<int> SaveChangesAsync()
|
async public virtual Task<int> SaveChangesAsync()
|
||||||
{
|
{
|
||||||
await ExecCommandAsync();
|
await ExecCommandAsync();
|
||||||
@ -133,3 +134,4 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
@ -8,11 +8,12 @@ using System.Linq.Expressions;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
namespace FreeSql
|
namespace FreeSql
|
||||||
{
|
{
|
||||||
partial class DbSet<TEntity>
|
partial class DbSet<TEntity>
|
||||||
{
|
{
|
||||||
|
|
||||||
Task DbContextExecCommandAsync()
|
Task DbContextExecCommandAsync()
|
||||||
{
|
{
|
||||||
_dicUpdateTimes.Clear();
|
_dicUpdateTimes.Clear();
|
||||||
@ -409,3 +410,4 @@ namespace FreeSql
|
|||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
@ -169,11 +169,11 @@ namespace FreeSql
|
|||||||
var lazyFieldValue = (bool)lazyField.GetValue(item);
|
var lazyFieldValue = (bool)lazyField.GetValue(item);
|
||||||
if (lazyFieldValue == false) continue;
|
if (lazyFieldValue == false) continue;
|
||||||
}
|
}
|
||||||
propVal = prop.Value.GetValue(item);
|
propVal = prop.Value.GetValue(item, null);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
propVal = prop.Value.GetValue(item);
|
propVal = prop.Value.GetValue(item, null);
|
||||||
if (propVal == null) continue;
|
if (propVal == null) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<Version>0.10.14</Version>
|
<Version>0.10.14</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
@ -29,7 +29,10 @@
|
|||||||
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||||
<DefineConstants>ns20;netstandard20</DefineConstants>
|
<DefineConstants>ns20;netstandard20</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
|
||||||
|
<DefineConstants>net40</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -79,10 +79,13 @@ namespace FreeSql
|
|||||||
ExecCommand();
|
ExecCommand();
|
||||||
return SaveChangesSuccess();
|
return SaveChangesSuccess();
|
||||||
}
|
}
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public override Task<int> SaveChangesAsync()
|
async public override Task<int> SaveChangesAsync()
|
||||||
{
|
{
|
||||||
await ExecCommandAsync();
|
await ExecCommandAsync();
|
||||||
return SaveChangesSuccess();
|
return SaveChangesSuccess();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace FreeSql
|
namespace FreeSql
|
||||||
{
|
{
|
||||||
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity>
|
public abstract partial class BaseRepository<TEntity> : IBaseRepository<TEntity>
|
||||||
where TEntity : class
|
where TEntity : class
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -78,35 +78,17 @@ namespace FreeSql
|
|||||||
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
async public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate)
|
|
||||||
{
|
|
||||||
var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
|
|
||||||
var sql = delete.ToSql();
|
|
||||||
var affrows = await delete.ExecuteAffrowsAsync();
|
|
||||||
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
|
||||||
return affrows;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Delete(TEntity entity)
|
public int Delete(TEntity entity)
|
||||||
{
|
{
|
||||||
_dbset.Remove(entity);
|
_dbset.Remove(entity);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> DeleteAsync(TEntity entity)
|
|
||||||
{
|
|
||||||
_dbset.Remove(entity);
|
|
||||||
return _db.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
public int Delete(IEnumerable<TEntity> entitys)
|
public int Delete(IEnumerable<TEntity> entitys)
|
||||||
{
|
{
|
||||||
_dbset.RemoveRange(entitys);
|
_dbset.RemoveRange(entitys);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> DeleteAsync(IEnumerable<TEntity> entitys)
|
|
||||||
{
|
|
||||||
_dbset.RemoveRange(entitys);
|
|
||||||
return _db.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual TEntity Insert(TEntity entity)
|
public virtual TEntity Insert(TEntity entity)
|
||||||
{
|
{
|
||||||
@ -114,45 +96,23 @@ namespace FreeSql
|
|||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
async public virtual Task<TEntity> InsertAsync(TEntity entity)
|
|
||||||
{
|
|
||||||
await _dbset.AddAsync(entity);
|
|
||||||
_db.SaveChanges();
|
|
||||||
return entity;
|
|
||||||
}
|
|
||||||
public virtual List<TEntity> Insert(IEnumerable<TEntity> entitys)
|
public virtual List<TEntity> Insert(IEnumerable<TEntity> entitys)
|
||||||
{
|
{
|
||||||
_dbset.AddRange(entitys);
|
_dbset.AddRange(entitys);
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entitys.ToList();
|
return entitys.ToList();
|
||||||
}
|
}
|
||||||
async public virtual Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys)
|
|
||||||
{
|
|
||||||
await _dbset.AddRangeAsync(entitys);
|
|
||||||
await _db.SaveChangesAsync();
|
|
||||||
return entitys.ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Update(TEntity entity)
|
public int Update(TEntity entity)
|
||||||
{
|
{
|
||||||
_dbset.Update(entity);
|
_dbset.Update(entity);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> UpdateAsync(TEntity entity)
|
|
||||||
{
|
|
||||||
_dbset.Update(entity);
|
|
||||||
return _db.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
public int Update(IEnumerable<TEntity> entitys)
|
public int Update(IEnumerable<TEntity> entitys)
|
||||||
{
|
{
|
||||||
_dbset.UpdateRange(entitys);
|
_dbset.UpdateRange(entitys);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> UpdateAsync(IEnumerable<TEntity> entitys)
|
|
||||||
{
|
|
||||||
_dbset.UpdateRange(entitys);
|
|
||||||
return _db.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Attach(TEntity data) => _db.Attach(data);
|
public void Attach(TEntity data) => _db.Attach(data);
|
||||||
public void Attach(IEnumerable<TEntity> data) => _db.AttachRange(data);
|
public void Attach(IEnumerable<TEntity> data) => _db.AttachRange(data);
|
||||||
@ -169,15 +129,9 @@ namespace FreeSql
|
|||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
async public Task<TEntity> InsertOrUpdateAsync(TEntity entity)
|
|
||||||
{
|
|
||||||
await _dbset.AddOrUpdateAsync(entity);
|
|
||||||
_db.SaveChanges();
|
|
||||||
return entity;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class BaseRepository<TEntity, TKey> : BaseRepository<TEntity>, IBaseRepository<TEntity, TKey>
|
public abstract partial class BaseRepository<TEntity, TKey> : BaseRepository<TEntity>, IBaseRepository<TEntity, TKey>
|
||||||
where TEntity : class
|
where TEntity : class
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -198,12 +152,9 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int Delete(TKey id) => Delete(CheckTKeyAndReturnIdEntity(id));
|
public int Delete(TKey id) => Delete(CheckTKeyAndReturnIdEntity(id));
|
||||||
public Task<int> DeleteAsync(TKey id) => DeleteAsync(CheckTKeyAndReturnIdEntity(id));
|
|
||||||
|
|
||||||
public TEntity Find(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOne();
|
public TEntity Find(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOne();
|
||||||
public Task<TEntity> FindAsync(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync();
|
|
||||||
|
|
||||||
public TEntity Get(TKey id) => Find(id);
|
public TEntity Get(TKey id) => Find(id);
|
||||||
public Task<TEntity> GetAsync(TKey id) => FindAsync(id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
using FreeSql.Extensions.EntityUtil;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
partial class BaseRepository<TEntity>
|
||||||
|
where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
|
async public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate)
|
||||||
|
{
|
||||||
|
var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
|
||||||
|
var sql = delete.ToSql();
|
||||||
|
var affrows = await delete.ExecuteAffrowsAsync();
|
||||||
|
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
||||||
|
return affrows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<int> DeleteAsync(TEntity entity)
|
||||||
|
{
|
||||||
|
_dbset.Remove(entity);
|
||||||
|
return _db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
public Task<int> DeleteAsync(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
|
_dbset.RemoveRange(entitys);
|
||||||
|
return _db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
async public virtual Task<TEntity> InsertAsync(TEntity entity)
|
||||||
|
{
|
||||||
|
await _dbset.AddAsync(entity);
|
||||||
|
_db.SaveChanges();
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
async public virtual Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
|
await _dbset.AddRangeAsync(entitys);
|
||||||
|
await _db.SaveChangesAsync();
|
||||||
|
return entitys.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<int> UpdateAsync(TEntity entity)
|
||||||
|
{
|
||||||
|
_dbset.Update(entity);
|
||||||
|
return _db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
public Task<int> UpdateAsync(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
|
_dbset.UpdateRange(entitys);
|
||||||
|
return _db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
async public Task<TEntity> InsertOrUpdateAsync(TEntity entity)
|
||||||
|
{
|
||||||
|
await _dbset.AddOrUpdateAsync(entity);
|
||||||
|
_db.SaveChanges();
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
partial class BaseRepository<TEntity, TKey>
|
||||||
|
{
|
||||||
|
|
||||||
|
public Task<int> DeleteAsync(TKey id) => DeleteAsync(CheckTKeyAndReturnIdEntity(id));
|
||||||
|
|
||||||
|
public Task<TEntity> FindAsync(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync();
|
||||||
|
|
||||||
|
public Task<TEntity> GetAsync(TKey id) => FindAsync(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
@ -29,7 +29,10 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
int Delete(Expression<Func<TEntity, bool>> predicate);
|
int Delete(Expression<Func<TEntity, bool>> predicate);
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate);
|
Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IBaseRepository<TEntity, TKey> : IBaseRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>, IBasicRepository<TEntity, TKey>
|
public interface IBaseRepository<TEntity, TKey> : IBaseRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>, IBasicRepository<TEntity, TKey>
|
||||||
|
@ -8,8 +8,6 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
TEntity Insert(TEntity entity);
|
TEntity Insert(TEntity entity);
|
||||||
List<TEntity> Insert(IEnumerable<TEntity> entitys);
|
List<TEntity> Insert(IEnumerable<TEntity> entitys);
|
||||||
Task<TEntity> InsertAsync(TEntity entity);
|
|
||||||
Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清空状态数据
|
/// 清空状态数据
|
||||||
@ -29,18 +27,26 @@ namespace FreeSql
|
|||||||
|
|
||||||
int Update(TEntity entity);
|
int Update(TEntity entity);
|
||||||
int Update(IEnumerable<TEntity> entitys);
|
int Update(IEnumerable<TEntity> entitys);
|
||||||
Task<int> UpdateAsync(TEntity entity);
|
|
||||||
Task<int> UpdateAsync(IEnumerable<TEntity> entitys);
|
|
||||||
|
|
||||||
TEntity InsertOrUpdate(TEntity entity);
|
TEntity InsertOrUpdate(TEntity entity);
|
||||||
Task<TEntity> InsertOrUpdateAsync(TEntity entity);
|
|
||||||
|
|
||||||
IUpdate<TEntity> UpdateDiy { get; }
|
IUpdate<TEntity> UpdateDiy { get; }
|
||||||
|
|
||||||
int Delete(TEntity entity);
|
int Delete(TEntity entity);
|
||||||
int Delete(IEnumerable<TEntity> entitys);
|
int Delete(IEnumerable<TEntity> entitys);
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TEntity> InsertAsync(TEntity entity);
|
||||||
|
Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys);
|
||||||
|
|
||||||
|
Task<int> UpdateAsync(TEntity entity);
|
||||||
|
Task<int> UpdateAsync(IEnumerable<TEntity> entitys);
|
||||||
|
Task<TEntity> InsertOrUpdateAsync(TEntity entity);
|
||||||
|
|
||||||
Task<int> DeleteAsync(TEntity entity);
|
Task<int> DeleteAsync(TEntity entity);
|
||||||
Task<int> DeleteAsync(IEnumerable<TEntity> entitys);
|
Task<int> DeleteAsync(IEnumerable<TEntity> entitys);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IBasicRepository<TEntity, TKey> : IBasicRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>
|
public interface IBasicRepository<TEntity, TKey> : IBasicRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>
|
||||||
@ -48,7 +54,10 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
int Delete(TKey id);
|
int Delete(TKey id);
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
Task<int> DeleteAsync(TKey id);
|
Task<int> DeleteAsync(TKey id);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,11 +20,12 @@ namespace FreeSql
|
|||||||
where TEntity : class
|
where TEntity : class
|
||||||
{
|
{
|
||||||
TEntity Get(TKey id);
|
TEntity Get(TKey id);
|
||||||
|
|
||||||
Task<TEntity> GetAsync(TKey id);
|
|
||||||
|
|
||||||
TEntity Find(TKey id);
|
TEntity Find(TKey id);
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TEntity> GetAsync(TKey id);
|
||||||
Task<TEntity> FindAsync(TKey id);
|
Task<TEntity> FindAsync(TKey id);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<Version>0.10.14</Version>
|
<Version>0.10.14</Version>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
<Description>FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite, and read/write separation、and split table.</Description>
|
<Description>FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite, and read/write separation、and split table.</Description>
|
||||||
|
19
FreeSql.sln
19
FreeSql.sln
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 15.0.26124.0
|
VisualStudioVersion = 16.0.29324.140
|
||||||
MinimumVisualStudioVersion = 15.0.26124.0
|
MinimumVisualStudioVersion = 15.0.26124.0
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql", "FreeSql\FreeSql.csproj", "{AF9C50EC-6EB6-494B-9B3B-7EDBA6FD0EBB}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql", "FreeSql\FreeSql.csproj", "{AF9C50EC-6EB6-494B-9B3B-7EDBA6FD0EBB}"
|
||||||
EndProject
|
EndProject
|
||||||
@ -64,6 +64,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Odbc", "Pr
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Odbc", "FreeSql.Tests\FreeSql.Tests.Provider.Odbc\FreeSql.Tests.Provider.Odbc.csproj", "{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Odbc", "FreeSql.Tests\FreeSql.Tests.Provider.Odbc\FreeSql.Tests.Provider.Odbc.csproj", "{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "orm_vs_net40", "Examples\orm_vs_net40\orm_vs_net40.csproj", "{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -374,6 +376,18 @@ Global
|
|||||||
{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}.Release|x64.Build.0 = Release|Any CPU
|
{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}.Release|x86.ActiveCfg = Release|Any CPU
|
{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}.Release|x86.Build.0 = Release|Any CPU
|
{FA5667B9-BA85-4970-8818-BF09DD8DA3B4}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -396,6 +410,7 @@ Global
|
|||||||
{FE0CB06E-493F-4CE8-B2D7-BF48CA8015C6} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}
|
{FE0CB06E-493F-4CE8-B2D7-BF48CA8015C6} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}
|
||||||
{3043DEF1-85DF-47AD-8D5D-327270794356} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}
|
{3043DEF1-85DF-47AD-8D5D-327270794356} = {4A92E8A6-9A6D-41A1-9CDA-DE10899648AA}
|
||||||
{C57444BA-8BF7-4790-A864-7F237123219B} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
|
{C57444BA-8BF7-4790-A864-7F237123219B} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
|
||||||
|
{1674BCE3-EEB4-4003-A2A7-06F51EFAEA23} = {94C8A78D-AA15-47B2-A348-530CD86BFC1B}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
|
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
|
||||||
|
@ -40,7 +40,7 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
public static bool IsNumberType(this Type that) => that == null ? false : dicIsNumberType.Value.ContainsKey(that);
|
public static bool IsNumberType(this Type that) => that == null ? false : dicIsNumberType.Value.ContainsKey(that);
|
||||||
public static bool IsNullableType(this Type that) => that?.FullName.StartsWith("System.Nullable`1[") == true;
|
public static bool IsNullableType(this Type that) => that?.FullName.StartsWith("System.Nullable`1[") == true;
|
||||||
public static bool IsAnonymousType(this Type that) => that?.FullName.StartsWith("<>f__AnonymousType") == true;
|
public static bool IsAnonymousType(this Type that) => that?.FullName.StartsWith("<>f__AnonymousType") == true;
|
||||||
public static Type NullableTypeOrThis(this Type that) => that?.IsNullableType() == true ? that.GenericTypeArguments.First() : that;
|
public static Type NullableTypeOrThis(this Type that) => that?.IsNullableType() == true ? that.GetGenericArguments().First() : that;
|
||||||
internal static string NotNullAndConcat(this string that, params object[] args) => string.IsNullOrEmpty(that) ? null : string.Concat(new object[] { that }.Concat(args));
|
internal static string NotNullAndConcat(this string that, params object[] args) => string.IsNullOrEmpty(that) ? null : string.Concat(new object[] { that }.Concat(args));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -64,15 +64,17 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
var value = dr.GetString(index);
|
var value = dr.GetString(index);
|
||||||
var t = typeof(T);
|
var t = typeof(T);
|
||||||
var fs = _dicGetFields.GetOrAdd(t, t2 => t2.GetFields());
|
var fs = _dicGetFields.GetOrAdd(t, t2 => t2.GetFields());
|
||||||
foreach (var f in fs)
|
foreach (var f in fs) {
|
||||||
if (f.GetCustomAttribute<DescriptionAttribute>()?.Description == value || f.Name == value) return Enum.Parse(t, f.Name, true);
|
var attr = f.GetCustomAttributes(typeof(DescriptionAttribute), false)?.FirstOrDefault() as DescriptionAttribute;
|
||||||
|
if (attr?.Description == value || f.Name == value) return Enum.Parse(t, f.Name, true);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ToDescriptionOrString(this Enum item)
|
public static string ToDescriptionOrString(this Enum item)
|
||||||
{
|
{
|
||||||
string name = item.ToString();
|
string name = item.ToString();
|
||||||
var desc = item.GetType().GetField(name)?.GetCustomAttribute<DescriptionAttribute>();
|
var desc = item.GetType().GetField(name)?.GetCustomAttributes(typeof(DescriptionAttribute), false)?.FirstOrDefault() as DescriptionAttribute;
|
||||||
return desc?.Description ?? name;
|
return desc?.Description ?? name;
|
||||||
}
|
}
|
||||||
public static long ToInt64(this Enum item)
|
public static long ToInt64(this Enum item)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<Version>0.10.14</Version>
|
<Version>0.10.14</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
@ -28,8 +28,12 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="SafeObjectPool" Version="2.1.1" />
|
<PackageReference Include="SafeObjectPool" Version="2.1.2" />
|
||||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
|
||||||
|
<DefineConstants>net40</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2711,6 +2711,14 @@
|
|||||||
<param name="source"></param>
|
<param name="source"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.IEnumerable{``0})">
|
||||||
|
<summary>
|
||||||
|
插入数据,传入实体集合
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="source"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IFreeSql.Update``1">
|
<member name="M:IFreeSql.Update``1">
|
||||||
<summary>
|
<summary>
|
||||||
修改数据
|
修改数据
|
||||||
|
@ -84,12 +84,16 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
int ExecuteAffrows();
|
int ExecuteAffrows();
|
||||||
Task<int> ExecuteAffrowsAsync();
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL语句,返回被删除的记录
|
/// 执行SQL语句,返回被删除的记录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<T1> ExecuteDeleted();
|
List<T1> ExecuteDeleted();
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<int> ExecuteAffrowsAsync();
|
||||||
Task<List<T1>> ExecuteDeletedAsync();
|
Task<List<T1>> ExecuteDeletedAsync();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -88,18 +88,22 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
int ExecuteAffrows();
|
int ExecuteAffrows();
|
||||||
Task<int> ExecuteAffrowsAsync();
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL语句,返回自增值
|
/// 执行SQL语句,返回自增值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
long ExecuteIdentity();
|
long ExecuteIdentity();
|
||||||
Task<long> ExecuteIdentityAsync();
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL语句,返回插入后的记录
|
/// 执行SQL语句,返回插入后的记录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<T1> ExecuteInserted();
|
List<T1> ExecuteInserted();
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<int> ExecuteAffrowsAsync();
|
||||||
|
Task<long> ExecuteIdentityAsync();
|
||||||
Task<List<T1>> ExecuteInsertedAsync();
|
Task<List<T1>> ExecuteInsertedAsync();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,9 +8,22 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace FreeSql
|
namespace FreeSql
|
||||||
{
|
{
|
||||||
public interface ISelect0<TSelect, T1>
|
public partial interface ISelect0<TSelect, T1>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<DataTable> ToDataTableAsync(string field = null);
|
||||||
|
Task<List<T1>> ToListAsync(bool includeNestedMembers = false);
|
||||||
|
Task<List<TTuple>> ToListAsync<TTuple>(string field);
|
||||||
|
|
||||||
|
Task<T1> ToOneAsync();
|
||||||
|
Task<T1> FirstAsync();
|
||||||
|
|
||||||
|
Task<bool> AnyAsync();
|
||||||
|
Task<long> CountAsync();
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 指定事务对象
|
/// 指定事务对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -36,7 +49,6 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
DataTable ToDataTable(string field = null);
|
DataTable ToDataTable(string field = null);
|
||||||
Task<DataTable> ToDataTableAsync(string field = null);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回 T1 实体所有字段的记录,记录不存在时返回 Count 为 0 的列表
|
/// 执行SQL查询,返回 T1 实体所有字段的记录,记录不存在时返回 Count 为 0 的列表
|
||||||
@ -44,7 +56,6 @@ namespace FreeSql
|
|||||||
/// <param name="includeNestedMembers">false: 返回 2级 LeftJoin/InnerJoin/RightJoin 对象;true: 返回所有 LeftJoin/InnerJoin/RightJoin 的导航数据</param>
|
/// <param name="includeNestedMembers">false: 返回 2级 LeftJoin/InnerJoin/RightJoin 对象;true: 返回所有 LeftJoin/InnerJoin/RightJoin 的导航数据</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<T1> ToList(bool includeNestedMembers = false);
|
List<T1> ToList(bool includeNestedMembers = false);
|
||||||
Task<List<T1>> ToListAsync(bool includeNestedMembers = false);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。
|
/// 执行SQL查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -59,20 +70,17 @@ namespace FreeSql
|
|||||||
/// <param name="field"></param>
|
/// <param name="field"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<TTuple> ToList<TTuple>(string field);
|
List<TTuple> ToList<TTuple>(string field);
|
||||||
Task<List<TTuple>> ToListAsync<TTuple>(string field);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
|
/// 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
T1 ToOne();
|
T1 ToOne();
|
||||||
Task<T1> ToOneAsync();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
|
/// 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
T1 First();
|
T1 First();
|
||||||
Task<T1> FirstAsync();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置表名规则,可用于分库/分表,参数1:实体类型;参数2:默认表名;返回值:新表名; <para></para>
|
/// 设置表名规则,可用于分库/分表,参数1:实体类型;参数2:默认表名;返回值:新表名; <para></para>
|
||||||
@ -103,14 +111,12 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
bool Any();
|
bool Any();
|
||||||
Task<bool> AnyAsync();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查询的记录数量
|
/// 查询的记录数量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
long Count();
|
long Count();
|
||||||
Task<long> CountAsync();
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查询的记录数量,以参数out形式返回
|
/// 查询的记录数量,以参数out形式返回
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -9,20 +9,38 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1> : ISelect0<ISelect<T1>, T1>, ILinqToSql<T1> where T1 : class
|
public interface ISelect<T1> : ISelect0<ISelect<T1>, T1>, ILinqToSql<T1> where T1 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<bool> AnyAsync(Expression<Func<T1, bool>> exp);
|
||||||
|
|
||||||
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
|
|
||||||
|
Task<TReturn> ToOneAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
|
Task<TDto> ToOneAsync<TDto>();
|
||||||
|
Task<TReturn> FirstAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
|
Task<TDto> FirstAsync<TDto>();
|
||||||
|
|
||||||
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select);
|
||||||
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,是否有记录
|
/// 执行SQL查询,是否有记录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="exp">lambda表达式</param>
|
/// <param name="exp">lambda表达式</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
bool Any(Expression<Func<T1, bool>> exp);
|
bool Any(Expression<Func<T1, bool>> exp);
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, bool>> exp);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回 DataTable
|
/// 执行SQL查询,返回 DataTable
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, TReturn>> select);
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回指定字段的记录,记录不存在时返回 Count 为 0 的列表
|
/// 执行SQL查询,返回指定字段的记录,记录不存在时返回 Count 为 0 的列表
|
||||||
@ -31,14 +49,12 @@ namespace FreeSql
|
|||||||
/// <param name="select">选择列</param>
|
/// <param name="select">选择列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, TReturn>> select);
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Count 为 0 的列表
|
/// 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Count 为 0 的列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDto"></typeparam>
|
/// <typeparam name="TDto"></typeparam>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<TDto> ToList<TDto>();
|
List<TDto> ToList<TDto>();
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
|
/// 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
|
||||||
@ -47,14 +63,12 @@ namespace FreeSql
|
|||||||
/// <param name="select">选择列</param>
|
/// <param name="select">选择列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TReturn ToOne<TReturn>(Expression<Func<T1, TReturn>> select);
|
TReturn ToOne<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
Task<TReturn> ToOneAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
|
/// 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDto"></typeparam>
|
/// <typeparam name="TDto"></typeparam>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TDto ToOne<TDto>();
|
TDto ToOne<TDto>();
|
||||||
Task<TDto> ToOneAsync<TDto>();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
|
/// 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
|
||||||
@ -63,14 +77,12 @@ namespace FreeSql
|
|||||||
/// <param name="select">选择列</param>
|
/// <param name="select">选择列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TReturn First<TReturn>(Expression<Func<T1, TReturn>> select);
|
TReturn First<TReturn>(Expression<Func<T1, TReturn>> select);
|
||||||
Task<TReturn> FirstAsync<TReturn>(Expression<Func<T1, TReturn>> select);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
|
/// 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TDto"></typeparam>
|
/// <typeparam name="TDto"></typeparam>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TDto First<TDto>();
|
TDto First<TDto>();
|
||||||
Task<TDto> FirstAsync<TDto>();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 返回即将执行的SQL语句
|
/// 返回即将执行的SQL语句
|
||||||
@ -87,7 +99,6 @@ namespace FreeSql
|
|||||||
/// <param name="select"></param>
|
/// <param name="select"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select);
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select);
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 求和
|
/// 求和
|
||||||
@ -96,7 +107,6 @@ namespace FreeSql
|
|||||||
/// <param name="column">列</param>
|
/// <param name="column">列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TMember Sum<TMember>(Expression<Func<T1, TMember>> column);
|
TMember Sum<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, TMember>> column);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 最小值
|
/// 最小值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -104,7 +114,6 @@ namespace FreeSql
|
|||||||
/// <param name="column">列</param>
|
/// <param name="column">列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TMember Min<TMember>(Expression<Func<T1, TMember>> column);
|
TMember Min<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, TMember>> column);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 最大值
|
/// 最大值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -112,7 +121,6 @@ namespace FreeSql
|
|||||||
/// <param name="column">列</param>
|
/// <param name="column">列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TMember Max<TMember>(Expression<Func<T1, TMember>> column);
|
TMember Max<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, TMember>> column);
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 平均值
|
/// 平均值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -120,7 +128,6 @@ namespace FreeSql
|
|||||||
/// <param name="column">列</param>
|
/// <param name="column">列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
TMember Avg<TMember>(Expression<Func<T1, TMember>> column);
|
TMember Avg<TMember>(Expression<Func<T1, TMember>> column);
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, TMember>> column);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 指定别名
|
/// 指定别名
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class
|
public interface ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp);
|
||||||
|
@ -9,30 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2> : ISelect0<ISelect<T1, T2>, T1> where T1 : class where T2 : class
|
public interface ISelect<T1, T2> : ISelect0<ISelect<T1, T2>, T1> where T1 : class where T2 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
|
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2> LeftJoin(Expression<Func<T1, T2, bool>> exp);
|
ISelect<T1, T2> LeftJoin(Expression<Func<T1, T2, bool>> exp);
|
||||||
ISelect<T1, T2> InnerJoin(Expression<Func<T1, T2, bool>> exp);
|
ISelect<T1, T2> InnerJoin(Expression<Func<T1, T2, bool>> exp);
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3> : ISelect0<ISelect<T1, T2, T3>, T1> where T1 : class where T2 : class where T3 : class
|
public interface ISelect<T1, T2, T3> : ISelect0<ISelect<T1, T2, T3>, T1> where T1 : class where T2 : class where T3 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3> LeftJoin(Expression<Func<T1, T2, T3, bool>> exp);
|
ISelect<T1, T2, T3> LeftJoin(Expression<Func<T1, T2, T3, bool>> exp);
|
||||||
ISelect<T1, T2, T3> InnerJoin(Expression<Func<T1, T2, T3, bool>> exp);
|
ISelect<T1, T2, T3> InnerJoin(Expression<Func<T1, T2, T3, bool>> exp);
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3, T4> : ISelect0<ISelect<T1, T2, T3, T4>, T1> where T1 : class where T2 : class where T3 : class where T4 : class
|
public interface ISelect<T1, T2, T3, T4> : ISelect0<ISelect<T1, T2, T3, T4>, T1> where T1 : class where T2 : class where T3 : class where T4 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4> LeftJoin(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
ISelect<T1, T2, T3, T4> LeftJoin(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
||||||
ISelect<T1, T2, T3, T4> InnerJoin(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
ISelect<T1, T2, T3, T4> InnerJoin(Expression<Func<T1, T2, T3, T4, bool>> exp);
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3, T4, T5> : ISelect0<ISelect<T1, T2, T3, T4, T5>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class
|
public interface ISelect<T1, T2, T3, T4, T5> : ISelect0<ISelect<T1, T2, T3, T4, T5>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
||||||
ISelect<T1, T2, T3, T4, T5> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, bool>> exp);
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3, T4, T5, T6> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class
|
public interface ISelect<T1, T2, T3, T4, T5, T6> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
||||||
ISelect<T1, T2, T3, T4, T5, T6> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp);
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3, T4, T5, T6, T7> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class
|
public interface ISelect<T1, T2, T3, T4, T5, T6, T7> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp);
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3, T4, T5, T6, T7, T8> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7, T8>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class
|
public interface ISelect<T1, T2, T3, T4, T5, T6, T7, T8> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7, T8>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp);
|
||||||
|
@ -9,29 +9,31 @@ namespace FreeSql
|
|||||||
public interface ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class
|
public interface ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> : ISelect0<ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>, T1> where T1 : class where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
Task<bool> AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
||||||
|
|
||||||
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
|
||||||
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
||||||
|
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
||||||
List<TDto> ToList<TDto>();
|
|
||||||
Task<List<TDto>> ToListAsync<TDto>();
|
Task<List<TDto>> ToListAsync<TDto>();
|
||||||
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
|
||||||
|
|
||||||
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select);
|
|
||||||
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select);
|
Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select);
|
||||||
|
|
||||||
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
|
||||||
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
Task<TMember> SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
|
||||||
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
Task<TMember> MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
|
||||||
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
Task<TMember> MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
|
||||||
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
Task<TMember> AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
||||||
|
DataTable ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
||||||
|
List<TReturn> ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
||||||
|
List<TDto> ToList<TDto>();
|
||||||
|
string ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select);
|
||||||
|
TReturn ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select);
|
||||||
|
TMember Sum<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
|
TMember Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
|
TMember Max<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
|
TMember Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column);
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> LeftJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp);
|
||||||
|
@ -8,6 +8,12 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
public interface ISelectGrouping<TKey, TValue>
|
public interface ISelectGrouping<TKey, TValue>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select);
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 按聚合条件过滤,Where(a => a.Count() > 10)
|
/// 按聚合条件过滤,Where(a => a.Count() > 10)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -36,7 +42,6 @@ namespace FreeSql
|
|||||||
/// <param name="select">选择列</param>
|
/// <param name="select">选择列</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<TReturn> ToList<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select);
|
List<TReturn> ToList<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select);
|
||||||
Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 【linq to sql】专用方法,不建议直接使用
|
/// 【linq to sql】专用方法,不建议直接使用
|
||||||
|
@ -153,12 +153,16 @@ namespace FreeSql
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
int ExecuteAffrows();
|
int ExecuteAffrows();
|
||||||
Task<int> ExecuteAffrowsAsync();
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行SQL语句,返回更新后的记录
|
/// 执行SQL语句,返回更新后的记录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<T1> ExecuteUpdated();
|
List<T1> ExecuteUpdated();
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<int> ExecuteAffrowsAsync();
|
||||||
Task<List<T1>> ExecuteUpdatedAsync();
|
Task<List<T1>> ExecuteUpdatedAsync();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -219,6 +219,8 @@ namespace FreeSql
|
|||||||
(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>) Query<T1, T2, T3, T4, T5>(DbTransaction transaction, string cmdText, object parms = null);
|
(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>) Query<T1, T2, T3, T4, T5>(DbTransaction transaction, string cmdText, object parms = null);
|
||||||
(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>) Query<T1, T2, T3, T4, T5>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null);
|
(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>) Query<T1, T2, T3, T4, T5>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null);
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
#region async
|
#region async
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
|
/// 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
|
||||||
@ -389,5 +391,6 @@ namespace FreeSql
|
|||||||
Task<(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>)> QueryAsync<T1, T2, T3, T4, T5>(DbTransaction transaction, string cmdText, object parms = null);
|
Task<(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>)> QueryAsync<T1, T2, T3, T4, T5>(DbTransaction transaction, string cmdText, object parms = null);
|
||||||
Task<(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>)> QueryAsync<T1, T2, T3, T4, T5>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null);
|
Task<(List<T1>, List<T2>, List<T3>, List<T4>, List<T5>)> QueryAsync<T1, T2, T3, T4, T5>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null);
|
||||||
#endregion
|
#endregion
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,13 @@ public interface IFreeSql : IDisposable
|
|||||||
/// <param name="source"></param>
|
/// <param name="source"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
IInsert<T1> Insert<T1>(List<T1> source) where T1 : class;
|
IInsert<T1> Insert<T1>(List<T1> source) where T1 : class;
|
||||||
|
/// <summary>
|
||||||
|
/// 插入数据,传入实体集合
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1"></typeparam>
|
||||||
|
/// <param name="source"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 修改数据
|
/// 修改数据
|
||||||
|
@ -617,7 +617,7 @@ namespace FreeSql.Internal
|
|||||||
var exp3tmpArg1Type = exp3tmpCall.Arguments.FirstOrDefault()?.Type;
|
var exp3tmpArg1Type = exp3tmpCall.Arguments.FirstOrDefault()?.Type;
|
||||||
if (exp3tmpArg1Type != null)
|
if (exp3tmpArg1Type != null)
|
||||||
{
|
{
|
||||||
asSelectEntityType = exp3tmpArg1Type.GetElementType() ?? exp3tmpArg1Type.GenericTypeArguments.FirstOrDefault();
|
asSelectEntityType = exp3tmpArg1Type.GetElementType() ?? exp3tmpArg1Type.GetGenericArguments().FirstOrDefault();
|
||||||
if (asSelectEntityType != null)
|
if (asSelectEntityType != null)
|
||||||
{
|
{
|
||||||
fsql = _dicExpressionLambdaToSqlAsSelectMethodInfo.GetOrAdd(asSelectEntityType, asSelectEntityType2 => typeof(IFreeSql).GetMethod("Select", new Type[0]).MakeGenericMethod(asSelectEntityType2))
|
fsql = _dicExpressionLambdaToSqlAsSelectMethodInfo.GetOrAdd(asSelectEntityType, asSelectEntityType2 => typeof(IFreeSql).GetMethod("Select", new Type[0]).MakeGenericMethod(asSelectEntityType2))
|
||||||
@ -1051,7 +1051,7 @@ namespace FreeSql.Internal
|
|||||||
case ExpressionType.MemberAccess:
|
case ExpressionType.MemberAccess:
|
||||||
|
|
||||||
var exp2Type = exp2.Type;
|
var exp2Type = exp2.Type;
|
||||||
if (exp2Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) exp2Type = exp2Type.GenericTypeArguments.LastOrDefault() ?? exp2.Type;
|
if (exp2Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) exp2Type = exp2Type.GetGenericArguments().LastOrDefault() ?? exp2.Type;
|
||||||
var tb2tmp = _common.GetTableByEntity(exp2Type);
|
var tb2tmp = _common.GetTableByEntity(exp2Type);
|
||||||
var mp2 = exp2 as MemberExpression;
|
var mp2 = exp2 as MemberExpression;
|
||||||
if (mp2?.Member.Name == "Key" && mp2.Expression.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) continue;
|
if (mp2?.Member.Name == "Key" && mp2.Expression.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) continue;
|
||||||
|
@ -7,6 +7,8 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
namespace FreeSql.Internal.CommonProvider
|
namespace FreeSql.Internal.CommonProvider
|
||||||
{
|
{
|
||||||
partial class AdoProvider
|
partial class AdoProvider
|
||||||
@ -729,3 +731,4 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
@ -79,34 +79,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
this.ClearData();
|
this.ClearData();
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
async public Task<int> ExecuteAffrowsAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
var dbParms = _params.ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var affrows = 0;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
this.ClearData();
|
|
||||||
return affrows;
|
|
||||||
}
|
|
||||||
public abstract List<T1> ExecuteDeleted();
|
public abstract List<T1> ExecuteDeleted();
|
||||||
public abstract Task<List<T1>> ExecuteDeletedAsync();
|
|
||||||
|
|
||||||
public IDelete<T1> Where(Expression<Func<T1, bool>> exp) => this.Where(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp?.Body, null));
|
public IDelete<T1> Where(Expression<Func<T1, bool>> exp) => this.Where(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp?.Body, null));
|
||||||
public IDelete<T1> Where(string sql, object parms = null)
|
public IDelete<T1> Where(string sql, object parms = null)
|
||||||
|
45
FreeSql/Internal/CommonProvider/DeleteProviderAsync.cs
Normal file
45
FreeSql/Internal/CommonProvider/DeleteProviderAsync.cs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
using FreeSql.Internal.Model;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FreeSql.Internal.CommonProvider
|
||||||
|
{
|
||||||
|
partial class DeleteProvider<T1>
|
||||||
|
{
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
async public Task<int> ExecuteAffrowsAsync()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return 0;
|
||||||
|
var dbParms = _params.ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var affrows = 0;
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
this.ClearData();
|
||||||
|
return affrows;
|
||||||
|
}
|
||||||
|
public abstract Task<List<T1>> ExecuteDeletedAsync();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
@ -224,57 +224,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ClearData();
|
ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit)
|
|
||||||
{
|
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
|
||||||
var ret = 0;
|
|
||||||
if (ss.Any() == false)
|
|
||||||
{
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (ss.Length == 1)
|
|
||||||
{
|
|
||||||
ret = await this.RawExecuteAffrowsAsync();
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (_transaction == null)
|
|
||||||
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
|
||||||
|
|
||||||
if (_transaction != null)
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret += await this.RawExecuteAffrowsAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
|
||||||
{
|
|
||||||
_transaction = conn.Value.BeginTransaction();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret += await this.RawExecuteAffrowsAsync();
|
|
||||||
}
|
|
||||||
_transaction.Commit();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_transaction.Rollback();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
_transaction = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
protected long SplitExecuteIdentity(int valuesLimit, int parameterLimit)
|
protected long SplitExecuteIdentity(int valuesLimit, int parameterLimit)
|
||||||
{
|
{
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
@ -328,59 +278,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ClearData();
|
ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected Task<long> SplitExecuteIdentityAsync(int valuesLimit, int parameterLimit)
|
|
||||||
{
|
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
|
||||||
long ret = 0;
|
|
||||||
if (ss.Any() == false)
|
|
||||||
{
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (ss.Length == 1)
|
|
||||||
{
|
|
||||||
ret = await this.RawExecuteIdentityAsync();
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (_transaction == null)
|
|
||||||
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
|
||||||
|
|
||||||
if (_transaction != null)
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync();
|
|
||||||
else ret = await this.RawExecuteIdentityAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
|
||||||
{
|
|
||||||
_transaction = conn.Value.BeginTransaction();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync();
|
|
||||||
else ret = await this.RawExecuteIdentityAsync();
|
|
||||||
}
|
|
||||||
_transaction.Commit();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_transaction.Rollback();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
_transaction = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
protected List<T1> SplitExecuteInserted(int valuesLimit, int parameterLimit)
|
protected List<T1> SplitExecuteInserted(int valuesLimit, int parameterLimit)
|
||||||
{
|
{
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
@ -432,57 +330,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ClearData();
|
ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected Task<List<T1>> SplitExecuteInsertedAsync(int valuesLimit, int parameterLimit)
|
|
||||||
{
|
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
|
||||||
var ret = new List<T1>();
|
|
||||||
if (ss.Any() == false)
|
|
||||||
{
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (ss.Length == 1)
|
|
||||||
{
|
|
||||||
ret = await this.RawExecuteInsertedAsync();
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (_transaction == null)
|
|
||||||
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
|
||||||
|
|
||||||
if (_transaction != null)
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret.AddRange(await this.RawExecuteInsertedAsync());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
|
||||||
{
|
|
||||||
_transaction = conn.Value.BeginTransaction();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret.AddRange(await this.RawExecuteInsertedAsync());
|
|
||||||
}
|
|
||||||
_transaction.Commit();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_transaction.Rollback();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
_transaction = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
protected int RawExecuteAffrows()
|
protected int RawExecuteAffrows()
|
||||||
@ -508,40 +355,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
async protected Task<int> RawExecuteAffrowsAsync()
|
|
||||||
{
|
|
||||||
var sql = ToSql();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var affrows = 0;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return affrows;
|
|
||||||
}
|
|
||||||
protected abstract long RawExecuteIdentity();
|
protected abstract long RawExecuteIdentity();
|
||||||
protected abstract Task<long> RawExecuteIdentityAsync();
|
|
||||||
protected abstract List<T1> RawExecuteInserted();
|
protected abstract List<T1> RawExecuteInserted();
|
||||||
protected abstract Task<List<T1>> RawExecuteInsertedAsync();
|
|
||||||
|
|
||||||
public abstract int ExecuteAffrows();
|
public abstract int ExecuteAffrows();
|
||||||
public abstract Task<int> ExecuteAffrowsAsync();
|
|
||||||
public abstract long ExecuteIdentity();
|
public abstract long ExecuteIdentity();
|
||||||
public abstract Task<long> ExecuteIdentityAsync();
|
|
||||||
public abstract List<T1> ExecuteInserted();
|
public abstract List<T1> ExecuteInserted();
|
||||||
public abstract Task<List<T1>> ExecuteInsertedAsync();
|
|
||||||
|
|
||||||
public IInsert<T1> IgnoreColumns(Expression<Func<T1, object>> columns)
|
public IInsert<T1> IgnoreColumns(Expression<Func<T1, object>> columns)
|
||||||
{
|
{
|
||||||
|
210
FreeSql/Internal/CommonProvider/InsertProviderAsync.cs
Normal file
210
FreeSql/Internal/CommonProvider/InsertProviderAsync.cs
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
using FreeSql.Internal.Model;
|
||||||
|
using SafeObjectPool;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FreeSql.Internal.CommonProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
partial class InsertProvider<T1>
|
||||||
|
{
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
async protected Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit)
|
||||||
|
{
|
||||||
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
|
var ret = 0;
|
||||||
|
if (ss.Any() == false)
|
||||||
|
{
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (ss.Length == 1)
|
||||||
|
{
|
||||||
|
ret = await this.RawExecuteAffrowsAsync();
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (_transaction == null)
|
||||||
|
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
||||||
|
|
||||||
|
if (_transaction != null)
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret += await this.RawExecuteAffrowsAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
|
{
|
||||||
|
_transaction = conn.Value.BeginTransaction();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret += await this.RawExecuteAffrowsAsync();
|
||||||
|
}
|
||||||
|
_transaction.Commit();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
_transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
_transaction = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
async protected Task<long> SplitExecuteIdentityAsync(int valuesLimit, int parameterLimit)
|
||||||
|
{
|
||||||
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
|
long ret = 0;
|
||||||
|
if (ss.Any() == false)
|
||||||
|
{
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (ss.Length == 1)
|
||||||
|
{
|
||||||
|
ret = await this.RawExecuteIdentityAsync();
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (_transaction == null)
|
||||||
|
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
||||||
|
|
||||||
|
if (_transaction != null)
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync();
|
||||||
|
else ret = await this.RawExecuteIdentityAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
|
{
|
||||||
|
_transaction = conn.Value.BeginTransaction();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync();
|
||||||
|
else ret = await this.RawExecuteIdentityAsync();
|
||||||
|
}
|
||||||
|
_transaction.Commit();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
_transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
_transaction = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
async protected Task<List<T1>> SplitExecuteInsertedAsync(int valuesLimit, int parameterLimit)
|
||||||
|
{
|
||||||
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
|
var ret = new List<T1>();
|
||||||
|
if (ss.Any() == false)
|
||||||
|
{
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (ss.Length == 1)
|
||||||
|
{
|
||||||
|
ret = await this.RawExecuteInsertedAsync();
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (_transaction == null)
|
||||||
|
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
||||||
|
|
||||||
|
if (_transaction != null)
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret.AddRange(await this.RawExecuteInsertedAsync());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
|
{
|
||||||
|
_transaction = conn.Value.BeginTransaction();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret.AddRange(await this.RawExecuteInsertedAsync());
|
||||||
|
}
|
||||||
|
_transaction.Commit();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
_transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
_transaction = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
async protected Task<int> RawExecuteAffrowsAsync()
|
||||||
|
{
|
||||||
|
var sql = ToSql();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var affrows = 0;
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return affrows;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Task<long> RawExecuteIdentityAsync();
|
||||||
|
protected abstract Task<List<T1>> RawExecuteInsertedAsync();
|
||||||
|
|
||||||
|
public abstract Task<int> ExecuteAffrowsAsync();
|
||||||
|
public abstract Task<long> ExecuteIdentityAsync();
|
||||||
|
public abstract Task<List<T1>> ExecuteInsertedAsync();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -15,7 +15,7 @@ using System.Threading.Tasks;
|
|||||||
namespace FreeSql.Internal.CommonProvider
|
namespace FreeSql.Internal.CommonProvider
|
||||||
{
|
{
|
||||||
|
|
||||||
public abstract class Select0Provider<TSelect, T1> : ISelect0<TSelect, T1> where TSelect : class where T1 : class
|
public abstract partial class Select0Provider<TSelect, T1> : ISelect0<TSelect, T1> where TSelect : class where T1 : class
|
||||||
{
|
{
|
||||||
|
|
||||||
protected int _limit, _skip;
|
protected int _limit, _skip;
|
||||||
@ -130,14 +130,8 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
this.Limit(1);
|
this.Limit(1);
|
||||||
return this.ToList<int>("1").FirstOrDefault() == 1;
|
return this.ToList<int>("1").FirstOrDefault() == 1;
|
||||||
}
|
}
|
||||||
async public Task<bool> AnyAsync()
|
|
||||||
{
|
|
||||||
this.Limit(1);
|
|
||||||
return (await this.ToListAsync<int>("1")).FirstOrDefault() == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long Count() => this.ToList<int>("count(1)").FirstOrDefault();
|
public long Count() => this.ToList<int>("count(1)").FirstOrDefault();
|
||||||
async public Task<long> CountAsync() => (await this.ToListAsync<int>("count(1)")).FirstOrDefault();
|
|
||||||
|
|
||||||
public TSelect Count(out long count)
|
public TSelect Count(out long count)
|
||||||
{
|
{
|
||||||
@ -285,30 +279,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async public Task<DataTable> ToDataTableAsync(string field = null)
|
|
||||||
{
|
|
||||||
var sql = this.ToSql(field);
|
|
||||||
var dbParms = _params.ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
DataTable ret = null;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<TTuple> ToList<TTuple>(string field)
|
public List<TTuple> ToList<TTuple>(string field)
|
||||||
{
|
{
|
||||||
@ -340,37 +310,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async public Task<List<TTuple>> ToListAsync<TTuple>(string field)
|
|
||||||
{
|
|
||||||
var sql = this.ToSql(field);
|
|
||||||
var type = typeof(TTuple);
|
|
||||||
var dbParms = _params.ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var ret = new List<TTuple>();
|
|
||||||
var flagStr = $"ToListField:{field}";
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
|
||||||
{
|
|
||||||
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, dr, 0, _commonUtils);
|
|
||||||
ret.Add((TTuple)read.Value);
|
|
||||||
return Task.FromResult(false);
|
|
||||||
}, CommandType.Text, sql, dbParms);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
internal List<T1> ToListAfPrivate(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
internal List<T1> ToListAfPrivate(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
||||||
{
|
{
|
||||||
var dbParms = _params.ToArray();
|
var dbParms = _params.ToArray();
|
||||||
@ -406,42 +345,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_trackToList?.Invoke(ret);
|
_trackToList?.Invoke(ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async internal Task<List<T1>> ToListAfPrivateAsync(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
|
||||||
{
|
|
||||||
var dbParms = _params.ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
|
||||||
{
|
|
||||||
ret.Add(af.Read(_orm, dr));
|
|
||||||
if (otherData != null)
|
|
||||||
{
|
|
||||||
var idx = af.FieldCount - 1;
|
|
||||||
foreach (var other in otherData)
|
|
||||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref idx, false));
|
|
||||||
}
|
|
||||||
return Task.FromResult(false);
|
|
||||||
}, CommandType.Text, sql, dbParms);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
foreach (var include in _includeToList) include?.Invoke(ret);
|
|
||||||
_orm.Aop.ToList?.Invoke(this, new Aop.ToListEventArgs(ret));
|
|
||||||
_trackToList?.Invoke(ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
internal List<T1> ToListPrivate(GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
internal List<T1> ToListPrivate(GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
||||||
{
|
{
|
||||||
string sql = null;
|
string sql = null;
|
||||||
@ -457,21 +360,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
return ToListAfPrivate(sql, af, otherData);
|
return ToListAfPrivate(sql, af, otherData);
|
||||||
}
|
}
|
||||||
internal Task<List<T1>> ToListPrivateAsync(GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
|
||||||
{
|
|
||||||
string sql = null;
|
|
||||||
if (otherData?.Length > 0)
|
|
||||||
{
|
|
||||||
var sbField = new StringBuilder().Append(af.Field);
|
|
||||||
foreach (var other in otherData)
|
|
||||||
sbField.Append(other.field);
|
|
||||||
sql = this.ToSql(sbField.ToString());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sql = this.ToSql(af.Field);
|
|
||||||
|
|
||||||
return ToListAfPrivateAsync(sql, af, otherData);
|
|
||||||
}
|
|
||||||
#region ToChunk
|
#region ToChunk
|
||||||
internal void ToListAfChunkPrivate(int chunkSize, Action<List<T1>> chunkDone, string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
internal void ToListAfChunkPrivate(int chunkSize, Action<List<T1>> chunkDone, string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
||||||
{
|
{
|
||||||
@ -555,24 +443,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (_selectExpression != null) return this.InternalToList<T1>(_selectExpression);
|
if (_selectExpression != null) return this.InternalToList<T1>(_selectExpression);
|
||||||
return this.ToListPrivate(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
|
return this.ToListPrivate(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
|
||||||
}
|
}
|
||||||
public virtual Task<List<T1>> ToListAsync(bool includeNestedMembers = false)
|
|
||||||
{
|
|
||||||
if (_selectExpression != null) return this.InternalToListAsync<T1>(_selectExpression);
|
|
||||||
return this.ToListPrivateAsync(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
|
|
||||||
}
|
|
||||||
public T1 ToOne()
|
public T1 ToOne()
|
||||||
{
|
{
|
||||||
this.Limit(1);
|
this.Limit(1);
|
||||||
return this.ToList().FirstOrDefault();
|
return this.ToList().FirstOrDefault();
|
||||||
}
|
}
|
||||||
async public Task<T1> ToOneAsync()
|
|
||||||
{
|
|
||||||
this.Limit(1);
|
|
||||||
return (await this.ToListAsync()).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
public T1 First() => this.ToOne();
|
public T1 First() => this.ToOne();
|
||||||
public Task<T1> FirstAsync() => this.ToOneAsync();
|
|
||||||
|
|
||||||
protected List<TReturn> ToListMapReader<TReturn>((ReadAnonymousTypeInfo map, string field) af)
|
protected List<TReturn> ToListMapReader<TReturn>((ReadAnonymousTypeInfo map, string field) af)
|
||||||
{
|
{
|
||||||
@ -605,38 +482,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_trackToList?.Invoke(ret);
|
_trackToList?.Invoke(ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected Task<List<TReturn>> ToListMapReaderAsync<TReturn>((ReadAnonymousTypeInfo map, string field) af)
|
|
||||||
{
|
|
||||||
var sql = this.ToSql(af.field);
|
|
||||||
var type = typeof(TReturn);
|
|
||||||
var dbParms = _params.ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var ret = new List<TReturn>();
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
|
||||||
{
|
|
||||||
var index = -1;
|
|
||||||
ret.Add((TReturn)_commonExpression.ReadAnonymous(af.map, dr, ref index, false));
|
|
||||||
return Task.FromResult(false);
|
|
||||||
}, CommandType.Text, sql, dbParms);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
_orm.Aop.ToList?.Invoke(this, new Aop.ToListEventArgs(ret));
|
|
||||||
_trackToList?.Invoke(ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
protected (ReadAnonymousTypeInfo map, string field) GetExpressionField(Expression newexp)
|
protected (ReadAnonymousTypeInfo map, string field) GetExpressionField(Expression newexp)
|
||||||
{
|
{
|
||||||
var map = new ReadAnonymousTypeInfo();
|
var map = new ReadAnonymousTypeInfo();
|
||||||
@ -872,7 +717,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var proptypeGeneric = prop.PropertyType;
|
var proptypeGeneric = prop.PropertyType;
|
||||||
if (proptypeGeneric.IsNullableType()) proptypeGeneric = proptypeGeneric.GenericTypeArguments.First();
|
if (proptypeGeneric.IsNullableType()) proptypeGeneric = proptypeGeneric.GetGenericArguments().First();
|
||||||
if (proptypeGeneric.IsEnum ||
|
if (proptypeGeneric.IsEnum ||
|
||||||
Utils.dicExecuteArrayRowReadClassOrTuple.ContainsKey(proptypeGeneric)) readExpAssign = Expression.New(Utils.RowInfo.Constructor,
|
Utils.dicExecuteArrayRowReadClassOrTuple.ContainsKey(proptypeGeneric)) readExpAssign = Expression.New(Utils.RowInfo.Constructor,
|
||||||
Utils.GetDataReaderValueBlockExpression(prop.PropertyType, Expression.Call(rowExp, Utils.MethodDataReaderGetValue, dataIndexExp)),
|
Utils.GetDataReaderValueBlockExpression(prop.PropertyType, Expression.Call(rowExp, Utils.MethodDataReaderGetValue, dataIndexExp)),
|
||||||
@ -1042,13 +887,9 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
#region common
|
#region common
|
||||||
|
|
||||||
protected TMember InternalAvg<TMember>(Expression exp) => this.ToList<TMember>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
protected TMember InternalAvg<TMember>(Expression exp) => this.ToList<TMember>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
||||||
async protected Task<TMember> InternalAvgAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
|
||||||
protected TMember InternalMax<TMember>(Expression exp) => this.ToList<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
protected TMember InternalMax<TMember>(Expression exp) => this.ToList<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
||||||
async protected Task<TMember> InternalMaxAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
|
||||||
protected TMember InternalMin<TMember>(Expression exp) => this.ToList<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
protected TMember InternalMin<TMember>(Expression exp) => this.ToList<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
||||||
async protected Task<TMember> InternalMinAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
|
||||||
protected TMember InternalSum<TMember>(Expression exp) => this.ToList<TMember>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
protected TMember InternalSum<TMember>(Expression exp) => this.ToList<TMember>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
||||||
async protected Task<TMember> InternalSumAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
|
||||||
|
|
||||||
protected ISelectGrouping<TKey, TValue> InternalGroupBy<TKey, TValue>(Expression columns)
|
protected ISelectGrouping<TKey, TValue> InternalGroupBy<TKey, TValue>(Expression columns)
|
||||||
{
|
{
|
||||||
@ -1077,7 +918,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
protected TSelect InternalOrderByDescending(Expression column) => this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, column, true, null)} DESC");
|
protected TSelect InternalOrderByDescending(Expression column) => this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, column, true, null)} DESC");
|
||||||
|
|
||||||
protected List<TReturn> InternalToList<TReturn>(Expression select) => this.ToListMapReader<TReturn>(this.GetExpressionField(select));
|
protected List<TReturn> InternalToList<TReturn>(Expression select) => this.ToListMapReader<TReturn>(this.GetExpressionField(select));
|
||||||
protected Task<List<TReturn>> InternalToListAsync<TReturn>(Expression select) => this.ToListMapReaderAsync<TReturn>(this.GetExpressionField(select));
|
|
||||||
protected string InternalToSql<TReturn>(Expression select)
|
protected string InternalToSql<TReturn>(Expression select)
|
||||||
{
|
{
|
||||||
var af = this.GetExpressionField(select);
|
var af = this.GetExpressionField(select);
|
||||||
@ -1108,6 +948,194 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected TReturn InternalToAggregate<TReturn>(Expression select)
|
||||||
|
{
|
||||||
|
var map = new ReadAnonymousTypeInfo();
|
||||||
|
var field = new StringBuilder();
|
||||||
|
var index = 0;
|
||||||
|
|
||||||
|
_commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression);
|
||||||
|
return this.ToListMapReader<TReturn>((map, field.Length > 0 ? field.Remove(0, 2).ToString() : null)).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected TSelect InternalWhere(Expression exp) => exp == null ? this as TSelect : this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp, null, _whereCascadeExpression));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
async public Task<bool> AnyAsync()
|
||||||
|
{
|
||||||
|
this.Limit(1);
|
||||||
|
return (await this.ToListAsync<int>("1")).FirstOrDefault() == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
async public Task<long> CountAsync() => (await this.ToListAsync<int>("count(1)")).FirstOrDefault();
|
||||||
|
|
||||||
|
async public Task<DataTable> ToDataTableAsync(string field = null)
|
||||||
|
{
|
||||||
|
var sql = this.ToSql(field);
|
||||||
|
var dbParms = _params.ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
DataTable ret = null;
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
async public Task<List<TTuple>> ToListAsync<TTuple>(string field)
|
||||||
|
{
|
||||||
|
var sql = this.ToSql(field);
|
||||||
|
var type = typeof(TTuple);
|
||||||
|
var dbParms = _params.ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var ret = new List<TTuple>();
|
||||||
|
var flagStr = $"ToListField:{field}";
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
||||||
|
{
|
||||||
|
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, dr, 0, _commonUtils);
|
||||||
|
ret.Add((TTuple)read.Value);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}, CommandType.Text, sql, dbParms);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
async internal Task<List<T1>> ToListAfPrivateAsync(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
||||||
|
{
|
||||||
|
var dbParms = _params.ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var ret = new List<T1>();
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
||||||
|
{
|
||||||
|
ret.Add(af.Read(_orm, dr));
|
||||||
|
if (otherData != null)
|
||||||
|
{
|
||||||
|
var idx = af.FieldCount - 1;
|
||||||
|
foreach (var other in otherData)
|
||||||
|
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref idx, false));
|
||||||
|
}
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}, CommandType.Text, sql, dbParms);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
foreach (var include in _includeToList) include?.Invoke(ret);
|
||||||
|
_orm.Aop.ToList?.Invoke(this, new Aop.ToListEventArgs(ret));
|
||||||
|
_trackToList?.Invoke(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal Task<List<T1>> ToListPrivateAsync(GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
|
||||||
|
{
|
||||||
|
string sql = null;
|
||||||
|
if (otherData?.Length > 0)
|
||||||
|
{
|
||||||
|
var sbField = new StringBuilder().Append(af.Field);
|
||||||
|
foreach (var other in otherData)
|
||||||
|
sbField.Append(other.field);
|
||||||
|
sql = this.ToSql(sbField.ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sql = this.ToSql(af.Field);
|
||||||
|
|
||||||
|
return ToListAfPrivateAsync(sql, af, otherData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Task<List<T1>> ToListAsync(bool includeNestedMembers = false)
|
||||||
|
{
|
||||||
|
if (_selectExpression != null) return this.InternalToListAsync<T1>(_selectExpression);
|
||||||
|
return this.ToListPrivateAsync(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
async public Task<T1> ToOneAsync()
|
||||||
|
{
|
||||||
|
this.Limit(1);
|
||||||
|
return (await this.ToListAsync()).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<T1> FirstAsync() => this.ToOneAsync();
|
||||||
|
|
||||||
|
async protected Task<List<TReturn>> ToListMapReaderAsync<TReturn>((ReadAnonymousTypeInfo map, string field) af)
|
||||||
|
{
|
||||||
|
var sql = this.ToSql(af.field);
|
||||||
|
var type = typeof(TReturn);
|
||||||
|
var dbParms = _params.ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var ret = new List<TReturn>();
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
||||||
|
{
|
||||||
|
var index = -1;
|
||||||
|
ret.Add((TReturn)_commonExpression.ReadAnonymous(af.map, dr, ref index, false));
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}, CommandType.Text, sql, dbParms);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
_orm.Aop.ToList?.Invoke(this, new Aop.ToListEventArgs(ret));
|
||||||
|
_trackToList?.Invoke(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
async protected Task<TMember> InternalAvgAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
||||||
|
async protected Task<TMember> InternalMaxAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
||||||
|
async protected Task<TMember> InternalMinAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
||||||
|
async protected Task<TMember> InternalSumAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})")).FirstOrDefault();
|
||||||
|
|
||||||
|
protected Task<List<TReturn>> InternalToListAsync<TReturn>(Expression select) => this.ToListMapReaderAsync<TReturn>(this.GetExpressionField(select));
|
||||||
|
|
||||||
async protected Task<DataTable> InternalToDataTableAsync(Expression select)
|
async protected Task<DataTable> InternalToDataTableAsync(Expression select)
|
||||||
{
|
{
|
||||||
var sql = this.InternalToSql<int>(select);
|
var sql = this.InternalToSql<int>(select);
|
||||||
@ -1133,15 +1161,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected TReturn InternalToAggregate<TReturn>(Expression select)
|
|
||||||
{
|
|
||||||
var map = new ReadAnonymousTypeInfo();
|
|
||||||
var field = new StringBuilder();
|
|
||||||
var index = 0;
|
|
||||||
|
|
||||||
_commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression);
|
|
||||||
return this.ToListMapReader<TReturn>((map, field.Length > 0 ? field.Remove(0, 2).ToString() : null)).FirstOrDefault();
|
|
||||||
}
|
|
||||||
async protected Task<TReturn> InternalToAggregateAsync<TReturn>(Expression select)
|
async protected Task<TReturn> InternalToAggregateAsync<TReturn>(Expression select)
|
||||||
{
|
{
|
||||||
var map = new ReadAnonymousTypeInfo();
|
var map = new ReadAnonymousTypeInfo();
|
||||||
@ -1151,8 +1170,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression);
|
_commonExpression.ReadAnonymousField(_tables, field, map, ref index, select, null, _whereCascadeExpression);
|
||||||
return (await this.ToListMapReaderAsync<TReturn>((map, field.Length > 0 ? field.Remove(0, 2).ToString() : null))).FirstOrDefault();
|
return (await this.ToListMapReaderAsync<TReturn>((map, field.Length > 0 ? field.Remove(0, 2).ToString() : null))).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
protected TSelect InternalWhere(Expression exp) => exp == null ? this as TSelect : this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp, null, _whereCascadeExpression));
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -42,13 +42,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>(exp?.Body);
|
||||||
@ -63,13 +56,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
TMember ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -77,13 +63,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -105,13 +84,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -119,27 +91,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -163,13 +121,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -219,11 +170,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, ISelectGroupingAggregate<T10>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -109,12 +109,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_tables[0].Parameter = column.Parameters[0];
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
public Task<TMember> AvgAsync<TMember>(Expression<Func<T1, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
_tables[0].Parameter = column.Parameters[0];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract ISelect<T1, T2> From<T2>(Expression<Func<ISelectFromExpression<T1>, T2, ISelectFromExpression<T1>>> exp) where T2 : class;// { this.InternalFrom(exp); var ret = new Select3Provider<T1, T2, T3>(_orm, _commonUtils, _commonExpression, null); Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, exp?.Parameters); return ret; }
|
public abstract ISelect<T1, T2> From<T2>(Expression<Func<ISelectFromExpression<T1>, T2, ISelectFromExpression<T1>>> exp) where T2 : class;// { this.InternalFrom(exp); var ret = new Select3Provider<T1, T2, T3>(_orm, _commonUtils, _commonExpression, null); Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, exp?.Parameters); return ret; }
|
||||||
public abstract ISelect<T1, T2, T3> From<T2, T3>(Expression<Func<ISelectFromExpression<T1>, T2, T3, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class;// { this.InternalFrom(exp); var ret = new Select3Provider<T1, T2, T3>(_orm, _commonUtils, _commonExpression, null); Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, exp?.Parameters); return ret; }
|
public abstract ISelect<T1, T2, T3> From<T2, T3>(Expression<Func<ISelectFromExpression<T1>, T2, T3, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class;// { this.InternalFrom(exp); var ret = new Select3Provider<T1, T2, T3>(_orm, _commonUtils, _commonExpression, null); Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, exp?.Parameters); return ret; }
|
||||||
@ -139,25 +133,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_tables[0].Parameter = column.Parameters[0];
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
public Task<TMember> MaxAsync<TMember>(Expression<Func<T1, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
_tables[0].Parameter = column.Parameters[0];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
public TMember Min<TMember>(Expression<Func<T1, TMember>> column)
|
public TMember Min<TMember>(Expression<Func<T1, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
_tables[0].Parameter = column.Parameters[0];
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
public Task<TMember> MinAsync<TMember>(Expression<Func<T1, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
_tables[0].Parameter = column.Parameters[0];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
public ISelect<T1> OrderBy<TMember>(Expression<Func<T1, TMember>> column) => this.OrderBy(true, column);
|
public ISelect<T1> OrderBy<TMember>(Expression<Func<T1, TMember>> column) => this.OrderBy(true, column);
|
||||||
public ISelect<T1> OrderBy<TMember>(bool condition, Expression<Func<T1, TMember>> column)
|
public ISelect<T1> OrderBy<TMember>(bool condition, Expression<Func<T1, TMember>> column)
|
||||||
{
|
{
|
||||||
@ -179,12 +160,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_tables[0].Parameter = column.Parameters[0];
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
public Task<TMember> SumAsync<TMember>(Expression<Func<T1, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
_tables[0].Parameter = column.Parameters[0];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<TReturn> ToList<TReturn>(Expression<Func<T1, TReturn>> select)
|
public List<TReturn> ToList<TReturn>(Expression<Func<T1, TReturn>> select)
|
||||||
{
|
{
|
||||||
@ -192,14 +167,8 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_tables[0].Parameter = select.Parameters[0];
|
_tables[0].Parameter = select.Parameters[0];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
public Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
_tables[0].Parameter = select.Parameters[0];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
public List<TDto> ToList<TDto>() => ToList(GetToListDtoSelector<TDto>());
|
public List<TDto> ToList<TDto>() => ToList(GetToListDtoSelector<TDto>());
|
||||||
public Task<List<TDto>> ToListAsync<TDto>() => ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -254,9 +223,9 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (collectionSelector.Body.NodeType == ExpressionType.Call)
|
if (collectionSelector.Body.NodeType == ExpressionType.Call)
|
||||||
{
|
{
|
||||||
var callExp = collectionSelector.Body as MethodCallExpression;
|
var callExp = collectionSelector.Body as MethodCallExpression;
|
||||||
if (callExp.Method.Name == "DefaultIfEmpty" && callExp.Object.Type.GenericTypeArguments.Any())
|
if (callExp.Method.Name == "DefaultIfEmpty" && callExp.Object.Type.GetGenericArguments().Any())
|
||||||
{
|
{
|
||||||
find = _tables.Where((a, idx) => idx > 0 && a.Type == SelectTableInfoType.InnerJoin && a.Table.Type == callExp.Object.Type.GenericTypeArguments[0]).LastOrDefault();
|
find = _tables.Where((a, idx) => idx > 0 && a.Type == SelectTableInfoType.InnerJoin && a.Table.Type == callExp.Object.Type.GetGenericArguments()[0]).LastOrDefault();
|
||||||
if (find != null)
|
if (find != null)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(find.On)) find.On = Regex.Replace(find.On, $@"\b{find.Alias}\.", $"{resultSelector.Parameters[1].Name}.");
|
if (!string.IsNullOrEmpty(find.On)) find.On = Regex.Replace(find.On, $@"\b{find.Alias}\.", $"{resultSelector.Parameters[1].Name}.");
|
||||||
@ -293,13 +262,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
_tables[0].Parameter = select.Parameters[0];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string ToSql<TReturn>(Expression<Func<T1, TReturn>> select)
|
public string ToSql<TReturn>(Expression<Func<T1, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -314,13 +276,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
_tables[0].Parameter = select.Parameters[0];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISelect<T1> Where(Expression<Func<T1, bool>> exp) => WhereIf(true, exp);
|
public ISelect<T1> Where(Expression<Func<T1, bool>> exp) => WhereIf(true, exp);
|
||||||
public ISelect<T1> WhereIf(bool condition, Expression<Func<T1, bool>> exp)
|
public ISelect<T1> WhereIf(bool condition, Expression<Func<T1, bool>> exp)
|
||||||
{
|
{
|
||||||
@ -372,20 +327,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool Any(Expression<Func<T1, bool>> exp) => this.Where(exp).Any();
|
public bool Any(Expression<Func<T1, bool>> exp) => this.Where(exp).Any();
|
||||||
public Task<bool> AnyAsync(Expression<Func<T1, bool>> exp) => this.Where(exp).AnyAsync();
|
|
||||||
|
|
||||||
public TReturn ToOne<TReturn>(Expression<Func<T1, TReturn>> select) => this.Limit(1).ToList(select).FirstOrDefault();
|
public TReturn ToOne<TReturn>(Expression<Func<T1, TReturn>> select) => this.Limit(1).ToList(select).FirstOrDefault();
|
||||||
async public Task<TReturn> ToOneAsync<TReturn>(Expression<Func<T1, TReturn>> select) => (await this.Limit(1).ToListAsync(select)).FirstOrDefault();
|
|
||||||
public TDto ToOne<TDto>() => this.Limit(1).ToList<TDto>().FirstOrDefault();
|
public TDto ToOne<TDto>() => this.Limit(1).ToList<TDto>().FirstOrDefault();
|
||||||
async public Task<TDto> ToOneAsync<TDto>() => (await this.Limit(1).ToListAsync<TDto>()).FirstOrDefault();
|
|
||||||
|
|
||||||
public TReturn First<TReturn>(Expression<Func<T1, TReturn>> select) => this.ToOne(select);
|
public TReturn First<TReturn>(Expression<Func<T1, TReturn>> select) => this.ToOne(select);
|
||||||
public Task<TReturn> FirstAsync<TReturn>(Expression<Func<T1, TReturn>> select) => this.ToOneAsync(select);
|
|
||||||
public TDto First<TDto>() => this.ToOne<TDto>();
|
public TDto First<TDto>() => this.ToOne<TDto>();
|
||||||
public Task<TDto> FirstAsync<TDto>() => this.ToOneAsync<TDto>();
|
|
||||||
|
|
||||||
public override List<T1> ToList(bool includeNestedMembers = false) => base.ToList(_isIncluded || includeNestedMembers);
|
public override List<T1> ToList(bool includeNestedMembers = false) => base.ToList(_isIncluded || includeNestedMembers);
|
||||||
public override Task<List<T1>> ToListAsync(bool includeNestedMembers = false) => base.ToListAsync(_isIncluded || includeNestedMembers);
|
|
||||||
|
|
||||||
bool _isIncluded = false;
|
bool _isIncluded = false;
|
||||||
public ISelect<T1> Include<TNavigate>(Expression<Func<T1, TNavigate>> navigateSelector) where TNavigate : class
|
public ISelect<T1> Include<TNavigate>(Expression<Func<T1, TNavigate>> navigateSelector) where TNavigate : class
|
||||||
@ -963,5 +912,60 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_orm.Aop.ToList?.Invoke(this, new Aop.ToListEventArgs(list));
|
_orm.Aop.ToList?.Invoke(this, new Aop.ToListEventArgs(list));
|
||||||
_trackToList?.Invoke(list);
|
_trackToList?.Invoke(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public Task<TMember> AvgAsync<TMember>(Expression<Func<T1, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
public Task<TMember> MaxAsync<TMember>(Expression<Func<T1, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
public Task<TMember> MinAsync<TMember>(Expression<Func<T1, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
public Task<TMember> SumAsync<TMember>(Expression<Func<T1, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
_tables[0].Parameter = column.Parameters[0];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
public Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
_tables[0].Parameter = select.Parameters[0];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
public Task<List<TDto>> ToListAsync<TDto>() => ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
public Task<DataTable> ToDataTableAsync<TReturn>(Expression<Func<T1, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
_tables[0].Parameter = select.Parameters[0];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
public Task<TReturn> ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
_tables[0].Parameter = select.Parameters[0];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<bool> AnyAsync(Expression<Func<T1, bool>> exp) => this.Where(exp).AnyAsync();
|
||||||
|
async public Task<TReturn> ToOneAsync<TReturn>(Expression<Func<T1, TReturn>> select) => (await this.Limit(1).ToListAsync(select)).FirstOrDefault();
|
||||||
|
async public Task<TDto> ToOneAsync<TDto>() => (await this.Limit(1).ToListAsync<TDto>()).FirstOrDefault();
|
||||||
|
public Task<TReturn> FirstAsync<TReturn>(Expression<Func<T1, TReturn>> select) => this.ToOneAsync(select);
|
||||||
|
public Task<TDto> FirstAsync<TDto>() => this.ToOneAsync<TDto>();
|
||||||
|
public override Task<List<T1>> ToListAsync(bool includeNestedMembers = false) => base.ToListAsync(_isIncluded || includeNestedMembers);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -26,13 +26,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2>.AvgAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2)> ISelect<T1, T2>.GroupBy<TKey>(Expression<Func<T1, T2, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2)> ISelect<T1, T2>.GroupBy<TKey>(Expression<Func<T1, T2, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2)>(exp?.Body);
|
||||||
@ -47,13 +40,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2>.MaxAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2>.Min<TMember>(Expression<Func<T1, T2, TMember>> column)
|
TMember ISelect<T1, T2>.Min<TMember>(Expression<Func<T1, T2, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -61,13 +47,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2>.MinAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2> ISelect<T1, T2>.OrderBy<TMember>(Expression<Func<T1, T2, TMember>> column)
|
ISelect<T1, T2> ISelect<T1, T2>.OrderBy<TMember>(Expression<Func<T1, T2, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -89,13 +68,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2>.SumAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select)
|
TReturn ISelect<T1, T2>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -103,27 +75,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2>.ToList<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
List<TReturn> ISelect<T1, T2>.ToList<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2>.ToListAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2>.ToList<TDto>() => (this as ISelect<T1, T2>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2>.ToList<TDto>() => (this as ISelect<T1, T2>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2>.ToListAsync<TDto>() => (this as ISelect<T1, T2>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -139,13 +98,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2>.ToSql<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
string ISelect<T1, T2>.ToSql<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -195,11 +147,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2>.AvgAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2>.MaxAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2>.MinAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2>.SumAsync<TMember>(Expression<Func<T1, T2, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2>.ToListAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2>.ToListAsync<TDto>() => (this as ISelect<T1, T2>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2>.AnyAsync(Expression<Func<T1, T2, bool>> exp)
|
Task<bool> ISelect<T1, T2>.AnyAsync(Expression<Func<T1, T2, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -28,13 +28,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3)> ISelect<T1, T2, T3>.GroupBy<TKey>(Expression<Func<T1, T2, T3, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3)> ISelect<T1, T2, T3>.GroupBy<TKey>(Expression<Func<T1, T2, T3, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3)>(exp?.Body);
|
||||||
@ -49,13 +42,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3>.Min<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
TMember ISelect<T1, T2, T3>.Min<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -63,13 +49,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3>.MinAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3> ISelect<T1, T2, T3>.OrderBy<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
ISelect<T1, T2, T3> ISelect<T1, T2, T3>.OrderBy<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -91,13 +70,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3>.SumAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -105,27 +77,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2, T3>.ToList<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3>.ToList<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2, T3>.ToList<TDto>() => (this as ISelect<T1, T2, T3>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3>.ToList<TDto>() => (this as ISelect<T1, T2, T3>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -142,13 +101,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3>.ToSql<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
string ISelect<T1, T2, T3>.ToSql<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -198,11 +150,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2, T3>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3>.MinAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3>.SumAsync<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2, T3>.AnyAsync(Expression<Func<T1, T2, T3, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3>.AnyAsync(Expression<Func<T1, T2, T3, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -30,13 +30,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3, T4)> ISelect<T1, T2, T3, T4>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3, T4)> ISelect<T1, T2, T3, T4>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4)>(exp?.Body);
|
||||||
@ -51,13 +44,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3, T4>.Min<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
TMember ISelect<T1, T2, T3, T4>.Min<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -65,13 +51,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4> ISelect<T1, T2, T3, T4>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
ISelect<T1, T2, T3, T4> ISelect<T1, T2, T3, T4>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -93,13 +72,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3, T4>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3, T4>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -107,20 +79,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3, T4>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TReturn> ISelect<T1, T2, T3, T4>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3, T4>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<TDto> ISelect<T1, T2, T3, T4>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3, T4>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3, T4>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, T4, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, T4, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -131,13 +97,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
Expression.Parameter(typeof(T4), "d"));
|
Expression.Parameter(typeof(T4), "d"));
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3, T4>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
DataTable ISelect<T1, T2, T3, T4>.ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
DataTable ISelect<T1, T2, T3, T4>.ToDataTable<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToDataTable(select?.Body);
|
if (select == null) return this.InternalToDataTable(select?.Body);
|
||||||
@ -145,13 +104,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3, T4>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3, T4>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
string ISelect<T1, T2, T3, T4>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -201,11 +153,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3, T4>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3, T4>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3, T4>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3, T4>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2, T3, T4>.AnyAsync(Expression<Func<T1, T2, T3, T4, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3, T4>.AnyAsync(Expression<Func<T1, T2, T3, T4, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -32,13 +32,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3, T4, T5)> ISelect<T1, T2, T3, T4, T5>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3, T4, T5)> ISelect<T1, T2, T3, T4, T5>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5)>(exp?.Body);
|
||||||
@ -53,13 +46,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3, T4, T5>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
TMember ISelect<T1, T2, T3, T4, T5>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -67,13 +53,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5> ISelect<T1, T2, T3, T4, T5>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
ISelect<T1, T2, T3, T4, T5> ISelect<T1, T2, T3, T4, T5>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -95,13 +74,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3, T4, T5>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3, T4, T5>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -109,27 +81,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3, T4, T5>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2, T3, T4, T5>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3, T4, T5>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2, T3, T4, T5>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3, T4, T5>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, T4, T5, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, T4, T5, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -148,13 +107,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3, T4, T5>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3, T4, T5>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
string ISelect<T1, T2, T3, T4, T5>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -204,11 +156,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3, T4, T5>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3, T4, T5>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2, T3, T4, T5>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3, T4, T5>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -34,13 +34,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6)> ISelect<T1, T2, T3, T4, T5, T6>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6)> ISelect<T1, T2, T3, T4, T5, T6>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6)>(exp?.Body);
|
||||||
@ -55,13 +48,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3, T4, T5, T6>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
TMember ISelect<T1, T2, T3, T4, T5, T6>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -69,13 +55,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6> ISelect<T1, T2, T3, T4, T5, T6>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
ISelect<T1, T2, T3, T4, T5, T6> ISelect<T1, T2, T3, T4, T5, T6>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -97,13 +76,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3, T4, T5, T6>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3, T4, T5, T6>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -111,27 +83,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2, T3, T4, T5, T6>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3, T4, T5, T6>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, T4, T5, T6, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, T4, T5, T6, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -151,13 +110,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3, T4, T5, T6>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
string ISelect<T1, T2, T3, T4, T5, T6>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -207,11 +159,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2, T3, T4, T5, T6>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3, T4, T5, T6>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -36,13 +36,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7)> ISelect<T1, T2, T3, T4, T5, T6, T7>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7)> ISelect<T1, T2, T3, T4, T5, T6, T7>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7)>(exp?.Body);
|
||||||
@ -57,13 +50,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3, T4, T5, T6, T7>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
TMember ISelect<T1, T2, T3, T4, T5, T6, T7>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -71,13 +57,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7> ISelect<T1, T2, T3, T4, T5, T6, T7>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
ISelect<T1, T2, T3, T4, T5, T6, T7> ISelect<T1, T2, T3, T4, T5, T6, T7>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -99,13 +78,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -113,27 +85,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, T4, T5, T6, T7, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, T4, T5, T6, T7, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -154,13 +113,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3, T4, T5, T6, T7>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
string ISelect<T1, T2, T3, T4, T5, T6, T7>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -210,11 +162,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -38,13 +38,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7, T8)> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7, T8)> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7, T8)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7, T8)>(exp?.Body);
|
||||||
@ -59,13 +52,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
TMember ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -73,13 +59,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -101,13 +80,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -115,27 +87,15 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -157,13 +117,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
string ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -213,11 +166,64 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -40,13 +40,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalAvg<TMember>(column?.Body);
|
return this.InternalAvg<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalAvgAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9)> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TKey>> exp)
|
ISelectGrouping<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9)> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.GroupBy<TKey>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TKey>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9)>(exp?.Body);
|
if (exp == null) return this.InternalGroupBy<TKey, (T1, T2, T3, T4, T5, T6, T7, T8, T9)>(exp?.Body);
|
||||||
@ -61,13 +54,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMax<TMember>(column?.Body);
|
return this.InternalMax<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMaxAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TMember ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
TMember ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.Min<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) return default(TMember);
|
if (column == null) return default(TMember);
|
||||||
@ -75,13 +61,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalMin<TMember>(column?.Body);
|
return this.InternalMin<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) return Task.FromResult(default(TMember));
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalMinAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.OrderBy<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
||||||
{
|
{
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
@ -103,13 +82,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalSum<TMember>(column?.Body);
|
return this.InternalSum<TMember>(column?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
|
||||||
{
|
|
||||||
if (column == null) this.InternalOrderBy(column?.Body);
|
|
||||||
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
|
||||||
return this.InternalSumAsync<TMember>(column?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select)
|
TReturn ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToAggregate<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return default(TReturn);
|
if (select == null) return default(TReturn);
|
||||||
@ -117,27 +89,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.InternalToAggregate<TReturn>(select?.Body);
|
return this.InternalToAggregate<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return Task.FromResult(default(TReturn));
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
List<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToList<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
if (select == null) return this.InternalToList<TReturn>(select?.Body);
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToList<TReturn>(select?.Body);
|
return this.InternalToList<TReturn>(select?.Body);
|
||||||
}
|
}
|
||||||
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToListAsync<TReturn>(select?.Body);
|
|
||||||
}
|
|
||||||
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>).ToList(GetToListDtoSelector<TDto>());
|
List<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToList<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>).ToList(GetToListDtoSelector<TDto>());
|
||||||
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>).ToListAsync(GetToListDtoSelector<TDto>());
|
|
||||||
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TDto>> GetToListDtoSelector<TDto>()
|
Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TDto>> GetToListDtoSelector<TDto>()
|
||||||
{
|
{
|
||||||
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
var ctor = typeof(TDto).GetConstructor(new Type[0]);
|
||||||
@ -159,14 +117,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
return this.InternalToDataTable(select?.Body);
|
return this.InternalToDataTable(select?.Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
|
||||||
{
|
|
||||||
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
|
||||||
return this.InternalToDataTableAsync(select?.Body);
|
|
||||||
}
|
|
||||||
|
|
||||||
string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
string ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToSql<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
||||||
{
|
{
|
||||||
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
if (select == null) return this.InternalToSql<TReturn>(select?.Body);
|
||||||
@ -180,14 +130,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin);
|
return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin);
|
||||||
}
|
}
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.InnerJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin);
|
if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin);
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin);
|
return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin);
|
||||||
}
|
}
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.RightJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.RightJoin(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin);
|
if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin);
|
||||||
@ -201,7 +149,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression));
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression));
|
||||||
}
|
}
|
||||||
|
|
||||||
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
||||||
{
|
{
|
||||||
if (condition == false || exp == null) return this;
|
if (condition == false || exp == null) return this;
|
||||||
@ -216,11 +163,65 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
Task<bool> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.AnyAsync(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
|
||||||
{
|
{
|
||||||
if (exp == null) return this.AnyAsync();
|
if (exp == null) return this.AnyAsync();
|
||||||
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
|
||||||
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, exp?.Body, null, _whereCascadeExpression)).AnyAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task<DataTable> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToDataTableAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToDataTableAsync(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TDto>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToListAsync<TDto>() => (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>).ToListAsync(GetToListDtoSelector<TDto>());
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.AvgAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalAvgAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.MaxAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMaxAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.MinAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) return Task.FromResult(default(TMember));
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalMinAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TMember> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.SumAsync<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
|
||||||
|
{
|
||||||
|
if (column == null) this.InternalOrderBy(column?.Body);
|
||||||
|
for (var a = 0; a < column.Parameters.Count; a++) _tables[a].Parameter = column.Parameters[a];
|
||||||
|
return this.InternalSumAsync<TMember>(column?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<TReturn> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToAggregateAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, ISelectGroupingAggregate<T2>, ISelectGroupingAggregate<T3>, ISelectGroupingAggregate<T4>, ISelectGroupingAggregate<T5>, ISelectGroupingAggregate<T6>, ISelectGroupingAggregate<T7>, ISelectGroupingAggregate<T8>, ISelectGroupingAggregate<T9>, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return Task.FromResult(default(TReturn));
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToAggregateAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<List<TReturn>> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.ToListAsync<TReturn>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn>> select)
|
||||||
|
{
|
||||||
|
if (select == null) return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
for (var a = 0; a < select.Parameters.Count; a++) _tables[a].Parameter = select.Parameters[a];
|
||||||
|
return this.InternalToListAsync<TReturn>(select?.Body);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -117,17 +117,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
method = method.MakeGenericMethod(typeof(TReturn));
|
method = method.MakeGenericMethod(typeof(TReturn));
|
||||||
return method.Invoke(_select, new object[] { (map, field.Length > 0 ? field.Remove(0, 2).ToString() : null) }) as List<TReturn>;
|
return method.Invoke(_select, new object[] { (map, field.Length > 0 ? field.Remove(0, 2).ToString() : null) }) as List<TReturn>;
|
||||||
}
|
}
|
||||||
public Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
|
|
||||||
{
|
|
||||||
var map = new ReadAnonymousTypeInfo();
|
|
||||||
var field = new StringBuilder();
|
|
||||||
var index = 0;
|
|
||||||
|
|
||||||
_comonExp.ReadAnonymousField(null, field, map, ref index, select, getSelectGroupingMapString, null);
|
|
||||||
var method = _select.GetType().GetMethod("ToListMapReaderAsync", BindingFlags.Instance | BindingFlags.NonPublic);
|
|
||||||
method = method.MakeGenericMethod(typeof(TReturn));
|
|
||||||
return method.Invoke(_select, new object[] { (map, field.Length > 0 ? field.Remove(0, 2).ToString() : null) }) as Task<List<TReturn>>;
|
|
||||||
}
|
|
||||||
public List<TReturn> Select<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select) => ToList(select);
|
public List<TReturn> Select<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select) => ToList(select);
|
||||||
|
|
||||||
public string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
|
public string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
|
||||||
@ -171,5 +161,20 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
method.Invoke(_select, new object[] { pageNumber, pageSize });
|
method.Invoke(_select, new object[] { pageNumber, pageSize });
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
|
||||||
|
{
|
||||||
|
var map = new ReadAnonymousTypeInfo();
|
||||||
|
var field = new StringBuilder();
|
||||||
|
var index = 0;
|
||||||
|
|
||||||
|
_comonExp.ReadAnonymousField(null, field, map, ref index, select, getSelectGroupingMapString, null);
|
||||||
|
var method = _select.GetType().GetMethod("ToListMapReaderAsync", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
|
method = method.MakeGenericMethod(typeof(TReturn));
|
||||||
|
return method.Invoke(_select, new object[] { (map, field.Length > 0 ? field.Remove(0, 2).ToString() : null) }) as Task<List<TReturn>>;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,52 +180,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ClearData();
|
ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit)
|
|
||||||
{
|
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
|
||||||
var ret = 0;
|
|
||||||
if (ss.Length <= 1)
|
|
||||||
{
|
|
||||||
ret = await this.RawExecuteAffrowsAsync();
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (_transaction == null)
|
|
||||||
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
|
||||||
|
|
||||||
if (_transaction != null)
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret += await this.RawExecuteAffrowsAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
|
||||||
{
|
|
||||||
_transaction = conn.Value.BeginTransaction();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret += await this.RawExecuteAffrowsAsync();
|
|
||||||
}
|
|
||||||
_transaction.Commit();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_transaction.Rollback();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
_transaction = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
protected List<T1> SplitExecuteUpdated(int valuesLimit, int parameterLimit)
|
protected List<T1> SplitExecuteUpdated(int valuesLimit, int parameterLimit)
|
||||||
{
|
{
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
@ -272,52 +227,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ClearData();
|
ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected Task<List<T1>> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit)
|
|
||||||
{
|
|
||||||
var ss = SplitSource(valuesLimit, parameterLimit);
|
|
||||||
var ret = new List<T1>();
|
|
||||||
if (ss.Length <= 1)
|
|
||||||
{
|
|
||||||
ret = await this.RawExecuteUpdatedAsync();
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (_transaction == null)
|
|
||||||
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
|
||||||
|
|
||||||
if (_transaction != null)
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret.AddRange(await this.RawExecuteUpdatedAsync());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
|
||||||
{
|
|
||||||
_transaction = conn.Value.BeginTransaction();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (var a = 0; a < ss.Length; a++)
|
|
||||||
{
|
|
||||||
_source = ss[a];
|
|
||||||
ret.AddRange(await this.RawExecuteUpdatedAsync());
|
|
||||||
}
|
|
||||||
_transaction.Commit();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_transaction.Rollback();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
_transaction = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ClearData();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
protected int RawExecuteAffrows()
|
protected int RawExecuteAffrows()
|
||||||
@ -346,39 +255,11 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
async protected Task<int> RawExecuteAffrowsAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var affrows = 0;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
|
|
||||||
ValidateVersionAndThrow(affrows);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return affrows;
|
|
||||||
}
|
|
||||||
protected abstract List<T1> RawExecuteUpdated();
|
protected abstract List<T1> RawExecuteUpdated();
|
||||||
protected abstract Task<List<T1>> RawExecuteUpdatedAsync();
|
|
||||||
|
|
||||||
public abstract int ExecuteAffrows();
|
public abstract int ExecuteAffrows();
|
||||||
public abstract Task<int> ExecuteAffrowsAsync();
|
|
||||||
public abstract List<T1> ExecuteUpdated();
|
public abstract List<T1> ExecuteUpdated();
|
||||||
public abstract Task<List<T1>> ExecuteUpdatedAsync();
|
|
||||||
|
|
||||||
public IUpdate<T1> IgnoreColumns(Expression<Func<T1, object>> columns) => IgnoreColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null));
|
public IUpdate<T1> IgnoreColumns(Expression<Func<T1, object>> columns) => IgnoreColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null));
|
||||||
public IUpdate<T1> UpdateColumns(Expression<Func<T1, object>> columns) => UpdateColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null));
|
public IUpdate<T1> UpdateColumns(Expression<Func<T1, object>> columns) => UpdateColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null));
|
||||||
@ -513,7 +394,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
if (col.Column.Attribute.IsNullable == true && col.Column.Attribute.MapType.IsNullableType())
|
if (col.Column.Attribute.IsNullable == true && col.Column.Attribute.MapType.IsNullableType())
|
||||||
{
|
{
|
||||||
var replval = _orm.CodeFirst.GetDbInfo(col.Column.Attribute.MapType.GenericTypeArguments.FirstOrDefault())?.defaultValue;
|
var replval = _orm.CodeFirst.GetDbInfo(col.Column.Attribute.MapType.GetGenericArguments().FirstOrDefault())?.defaultValue;
|
||||||
if (replval == null) continue;
|
if (replval == null) continue;
|
||||||
var replname = _commonUtils.QuoteSqlName(col.Column.Attribute.Name);
|
var replname = _commonUtils.QuoteSqlName(col.Column.Attribute.Name);
|
||||||
expt = expt.Replace(replname, _commonUtils.IsNull(replname, _commonUtils.FormatSql("{0}", replval)));
|
expt = expt.Replace(replname, _commonUtils.IsNull(replname, _commonUtils.FormatSql("{0}", replval)));
|
||||||
|
145
FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
Normal file
145
FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
using FreeSql.Extensions.EntityUtil;
|
||||||
|
using FreeSql.Internal.Model;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FreeSql.Internal.CommonProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
partial class UpdateProvider<T1>
|
||||||
|
{
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
async protected Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit)
|
||||||
|
{
|
||||||
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
|
var ret = 0;
|
||||||
|
if (ss.Length <= 1)
|
||||||
|
{
|
||||||
|
ret = await this.RawExecuteAffrowsAsync();
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (_transaction == null)
|
||||||
|
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
||||||
|
|
||||||
|
if (_transaction != null)
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret += await this.RawExecuteAffrowsAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
|
{
|
||||||
|
_transaction = conn.Value.BeginTransaction();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret += await this.RawExecuteAffrowsAsync();
|
||||||
|
}
|
||||||
|
_transaction.Commit();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
_transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
_transaction = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
async protected Task<List<T1>> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit)
|
||||||
|
{
|
||||||
|
var ss = SplitSource(valuesLimit, parameterLimit);
|
||||||
|
var ret = new List<T1>();
|
||||||
|
if (ss.Length <= 1)
|
||||||
|
{
|
||||||
|
ret = await this.RawExecuteUpdatedAsync();
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (_transaction == null)
|
||||||
|
this.WithTransaction(_orm.Ado.TransactionCurrentThread);
|
||||||
|
|
||||||
|
if (_transaction != null)
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret.AddRange(await this.RawExecuteUpdatedAsync());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (var conn = await _orm.Ado.MasterPool.GetAsync())
|
||||||
|
{
|
||||||
|
_transaction = conn.Value.BeginTransaction();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (var a = 0; a < ss.Length; a++)
|
||||||
|
{
|
||||||
|
_source = ss[a];
|
||||||
|
ret.AddRange(await this.RawExecuteUpdatedAsync());
|
||||||
|
}
|
||||||
|
_transaction.Commit();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
_transaction.Rollback();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
_transaction = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClearData();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
async protected Task<int> RawExecuteAffrowsAsync()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return 0;
|
||||||
|
var dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var affrows = 0;
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
|
||||||
|
ValidateVersionAndThrow(affrows);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return affrows;
|
||||||
|
}
|
||||||
|
protected abstract Task<List<T1>> RawExecuteUpdatedAsync();
|
||||||
|
|
||||||
|
public abstract Task<int> ExecuteAffrowsAsync();
|
||||||
|
public abstract Task<List<T1>> ExecuteUpdatedAsync();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
@ -272,7 +272,7 @@ namespace FreeSql.Internal
|
|||||||
if (table.Columns.TryGetValue(p.Name, out var trycol) == false) continue;
|
if (table.Columns.TryGetValue(p.Name, out var trycol) == false) continue;
|
||||||
if (psidx > 0) sb.Append(" AND ");
|
if (psidx > 0) sb.Append(" AND ");
|
||||||
sb.Append(aliasAndDot).Append(this.QuoteSqlName(trycol.Attribute.Name));
|
sb.Append(aliasAndDot).Append(this.QuoteSqlName(trycol.Attribute.Name));
|
||||||
sb.Append(this.FormatSql(" = {0}", Utils.GetDataReaderValue(trycol.Attribute.MapType, p.GetValue(dywhere))));
|
sb.Append(this.FormatSql(" = {0}", Utils.GetDataReaderValue(trycol.Attribute.MapType, p.GetValue(dywhere, null))));
|
||||||
++psidx;
|
++psidx;
|
||||||
}
|
}
|
||||||
if (psidx == 0) return "";
|
if (psidx == 0) return "";
|
||||||
@ -404,7 +404,7 @@ namespace FreeSql.Internal
|
|||||||
var initTasks = new Task[b];
|
var initTasks = new Task[b];
|
||||||
for (var c = 0; c < b; c++)
|
for (var c = 0; c < b; c++)
|
||||||
{
|
{
|
||||||
initTasks[c] = Task.Run(() =>
|
initTasks[c] = Task.Factory.StartNew(() =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -152,7 +152,7 @@ namespace FreeSql.Internal
|
|||||||
trytb.ColumnsByCsIgnore.Add(p.Name, col);
|
trytb.ColumnsByCsIgnore.Add(p.Name, col);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (entityDefault != null) colattr.DbDefautValue = trytb.Properties[p.Name].GetValue(entityDefault);
|
if (entityDefault != null) colattr.DbDefautValue = trytb.Properties[p.Name].GetValue(entityDefault, null);
|
||||||
if (p.PropertyType.IsEnum)
|
if (p.PropertyType.IsEnum)
|
||||||
{
|
{
|
||||||
var isEqualsEnumValue = false;
|
var isEqualsEnumValue = false;
|
||||||
@ -170,7 +170,7 @@ namespace FreeSql.Internal
|
|||||||
if (colattr.DbDefautValue == null) colattr.DbDefautValue = tp?.defaultValue;
|
if (colattr.DbDefautValue == null) colattr.DbDefautValue = tp?.defaultValue;
|
||||||
if (colattr.IsNullable == false && colattr.DbDefautValue == null)
|
if (colattr.IsNullable == false && colattr.DbDefautValue == null)
|
||||||
{
|
{
|
||||||
var citype = colattr.MapType.IsNullableType() ? colattr.MapType.GenericTypeArguments.FirstOrDefault() : colattr.MapType;
|
var citype = colattr.MapType.IsNullableType() ? colattr.MapType.GetGenericArguments().FirstOrDefault() : colattr.MapType;
|
||||||
if (citype.IsArray)
|
if (citype.IsArray)
|
||||||
colattr.DbDefautValue = Array.CreateInstance(citype, 0);
|
colattr.DbDefautValue = Array.CreateInstance(citype, 0);
|
||||||
else
|
else
|
||||||
@ -343,7 +343,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
throw new Exception($"【延时加载】{trytbTypeName} 编译错误:{ex.Message}\r\n\r\n{cscode}");
|
throw new Exception($"【延时加载】{trytbTypeName} 编译错误:{ex.Message}\r\n\r\n{cscode}");
|
||||||
}
|
}
|
||||||
var type = assembly.DefinedTypes.Where(a => a.FullName.EndsWith(trytbTypeLazyName)).FirstOrDefault();
|
var type = assembly.GetExportedTypes()/*.DefinedTypes*/.Where(a => a.FullName.EndsWith(trytbTypeLazyName)).FirstOrDefault();
|
||||||
trytb.TypeLazy = type;
|
trytb.TypeLazy = type;
|
||||||
trytb.TypeLazySetOrm = type.GetProperty("__fsql_orm__", BindingFlags.Instance | BindingFlags.NonPublic).GetSetMethod(true);
|
trytb.TypeLazySetOrm = type.GetProperty("__fsql_orm__", BindingFlags.Instance | BindingFlags.NonPublic).GetSetMethod(true);
|
||||||
tbc.AddOrUpdate(type, trytb, (oldkey, oldval) => trytb);
|
tbc.AddOrUpdate(type, trytb, (oldkey, oldval) => trytb);
|
||||||
@ -356,7 +356,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
var trytbTypeName = trytb.Type.IsNested ? $"{trytb.Type.DeclaringType.Namespace?.NotNullAndConcat(".")}{trytb.Type.DeclaringType.Name}.{trytb.Type.Name}" : $"{trytb.Type.Namespace?.NotNullAndConcat(".")}{trytb.Type.Name}";
|
var trytbTypeName = trytb.Type.IsNested ? $"{trytb.Type.DeclaringType.Namespace?.NotNullAndConcat(".")}{trytb.Type.DeclaringType.Name}.{trytb.Type.Name}" : $"{trytb.Type.Namespace?.NotNullAndConcat(".")}{trytb.Type.Name}";
|
||||||
var propTypeName = pnv.PropertyType.IsGenericType ?
|
var propTypeName = pnv.PropertyType.IsGenericType ?
|
||||||
$"{pnv.PropertyType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.Name.Remove(pnv.PropertyType.Name.IndexOf('`'))}<{string.Join(", ", pnv.PropertyType.GenericTypeArguments.Select(a => a.IsNested ? $"{a.DeclaringType.Namespace?.NotNullAndConcat(".")}{a.DeclaringType.Name}.{a.Name}" : $"{a.Namespace?.NotNullAndConcat(".")}{a.Name}"))}>" :
|
$"{pnv.PropertyType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.Name.Remove(pnv.PropertyType.Name.IndexOf('`'))}<{string.Join(", ", pnv.PropertyType.GetGenericArguments().Select(a => a.IsNested ? $"{a.DeclaringType.Namespace?.NotNullAndConcat(".")}{a.DeclaringType.Name}.{a.Name}" : $"{a.Namespace?.NotNullAndConcat(".")}{a.Name}"))}>" :
|
||||||
(pnv.PropertyType.IsNested ? $"{pnv.PropertyType.DeclaringType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.DeclaringType.Name}.{pnv.PropertyType.Name}" : $"{pnv.PropertyType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.Name}");
|
(pnv.PropertyType.IsNested ? $"{pnv.PropertyType.DeclaringType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.DeclaringType.Name}.{pnv.PropertyType.Name}" : $"{pnv.PropertyType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.Name}");
|
||||||
|
|
||||||
var pnvAttr = common.GetEntityNavigateAttribute(trytb.Type, pnv);
|
var pnvAttr = common.GetEntityNavigateAttribute(trytb.Type, pnv);
|
||||||
@ -365,7 +365,7 @@ namespace FreeSql.Internal
|
|||||||
nvref.Property = pnv;
|
nvref.Property = pnv;
|
||||||
|
|
||||||
//List 或 ICollection,一对多、多对多
|
//List 或 ICollection,一对多、多对多
|
||||||
var propElementType = pnv.PropertyType.GenericTypeArguments.FirstOrDefault() ?? pnv.PropertyType.GetElementType();
|
var propElementType = pnv.PropertyType.GetGenericArguments().FirstOrDefault() ?? pnv.PropertyType.GetElementType();
|
||||||
if (propElementType != null)
|
if (propElementType != null)
|
||||||
{
|
{
|
||||||
if (typeof(IEnumerable).IsAssignableFrom(pnv.PropertyType) == false) return;
|
if (typeof(IEnumerable).IsAssignableFrom(pnv.PropertyType) == false) return;
|
||||||
@ -398,7 +398,7 @@ namespace FreeSql.Internal
|
|||||||
if (pnvAttr?.ManyToMany != null)
|
if (pnvAttr?.ManyToMany != null)
|
||||||
{
|
{
|
||||||
isManyToMany = propElementType != trytb.Type &&
|
isManyToMany = propElementType != trytb.Type &&
|
||||||
tbref.Properties.Where(z => (z.Value.PropertyType.GenericTypeArguments.FirstOrDefault() == trytb.Type || z.Value.PropertyType.GetElementType() == trytb.Type) &&
|
tbref.Properties.Where(z => (z.Value.PropertyType.GetGenericArguments().FirstOrDefault() == trytb.Type || z.Value.PropertyType.GetElementType() == trytb.Type) &&
|
||||||
common.GetEntityNavigateAttribute(tbref.Type, z.Value)?.ManyToMany == pnvAttr.ManyToMany &&
|
common.GetEntityNavigateAttribute(tbref.Type, z.Value)?.ManyToMany == pnvAttr.ManyToMany &&
|
||||||
typeof(IEnumerable).IsAssignableFrom(z.Value.PropertyType)).Any();
|
typeof(IEnumerable).IsAssignableFrom(z.Value.PropertyType)).Any();
|
||||||
|
|
||||||
@ -419,7 +419,7 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
isManyToMany = propElementType != trytb.Type &&
|
isManyToMany = propElementType != trytb.Type &&
|
||||||
pnv.Name.EndsWith($"{tbref.CsName}s", StringComparison.CurrentCultureIgnoreCase) &&
|
pnv.Name.EndsWith($"{tbref.CsName}s", StringComparison.CurrentCultureIgnoreCase) &&
|
||||||
tbref.Properties.Where(z => (z.Value.PropertyType.GenericTypeArguments.FirstOrDefault() == trytb.Type || z.Value.PropertyType.GetElementType() == trytb.Type) &&
|
tbref.Properties.Where(z => (z.Value.PropertyType.GetGenericArguments().FirstOrDefault() == trytb.Type || z.Value.PropertyType.GetElementType() == trytb.Type) &&
|
||||||
z.Key.EndsWith($"{trytb.CsName}s", StringComparison.CurrentCultureIgnoreCase) &&
|
z.Key.EndsWith($"{trytb.CsName}s", StringComparison.CurrentCultureIgnoreCase) &&
|
||||||
typeof(IEnumerable).IsAssignableFrom(z.Value.PropertyType)).Any();
|
typeof(IEnumerable).IsAssignableFrom(z.Value.PropertyType)).Any();
|
||||||
}
|
}
|
||||||
@ -1025,7 +1025,7 @@ namespace FreeSql.Internal
|
|||||||
foreach (var p in ps)
|
foreach (var p in ps)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{p.Name}", StringComparison.CurrentCultureIgnoreCase) == -1) continue;
|
if (string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{p.Name}", StringComparison.CurrentCultureIgnoreCase) == -1) continue;
|
||||||
var pvalue = p.GetValue(obj);
|
var pvalue = p.GetValue(obj, null);
|
||||||
if (p.PropertyType == ttype) ret.Add((T)Convert.ChangeType(pvalue, ttype));
|
if (p.PropertyType == ttype) ret.Add((T)Convert.ChangeType(pvalue, ttype));
|
||||||
else ret.Add(constructorParamter(p.Name, p.PropertyType, pvalue));
|
else ret.Add(constructorParamter(p.Name, p.PropertyType, pvalue));
|
||||||
}
|
}
|
||||||
@ -1123,7 +1123,7 @@ namespace FreeSql.Internal
|
|||||||
), new[] { typeExp, indexesExp, rowExp, dataIndexExp, commonUtilExp }).Compile();
|
), new[] { typeExp, indexesExp, rowExp, dataIndexExp, commonUtilExp }).Compile();
|
||||||
|
|
||||||
var typeGeneric = type;
|
var typeGeneric = type;
|
||||||
if (typeGeneric.IsNullableType()) typeGeneric = type.GenericTypeArguments.First();
|
if (typeGeneric.IsNullableType()) typeGeneric = type.GetGenericArguments().First();
|
||||||
if (typeGeneric.IsEnum ||
|
if (typeGeneric.IsEnum ||
|
||||||
dicExecuteArrayRowReadClassOrTuple.ContainsKey(typeGeneric))
|
dicExecuteArrayRowReadClassOrTuple.ContainsKey(typeGeneric))
|
||||||
return Expression.Lambda<Func<Type, int[], DbDataReader, int, CommonUtils, RowInfo>>(
|
return Expression.Lambda<Func<Type, int[], DbDataReader, int, CommonUtils, RowInfo>>(
|
||||||
@ -1156,7 +1156,7 @@ namespace FreeSql.Internal
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var fieldtypeGeneric = field.FieldType;
|
var fieldtypeGeneric = field.FieldType;
|
||||||
if (fieldtypeGeneric.IsNullableType()) fieldtypeGeneric = fieldtypeGeneric.GenericTypeArguments.First();
|
if (fieldtypeGeneric.IsNullableType()) fieldtypeGeneric = fieldtypeGeneric.GetGenericArguments().First();
|
||||||
if (fieldtypeGeneric.IsEnum ||
|
if (fieldtypeGeneric.IsEnum ||
|
||||||
dicExecuteArrayRowReadClassOrTuple.ContainsKey(fieldtypeGeneric)) read2ExpAssign = Expression.New(RowInfo.Constructor,
|
dicExecuteArrayRowReadClassOrTuple.ContainsKey(fieldtypeGeneric)) read2ExpAssign = Expression.New(RowInfo.Constructor,
|
||||||
GetDataReaderValueBlockExpression(field.FieldType, Expression.Call(rowExp, MethodDataReaderGetValue, dataIndexExp)),
|
GetDataReaderValueBlockExpression(field.FieldType, Expression.Call(rowExp, MethodDataReaderGetValue, dataIndexExp)),
|
||||||
@ -1261,7 +1261,7 @@ namespace FreeSql.Internal
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var proptypeGeneric = readType;
|
var proptypeGeneric = readType;
|
||||||
if (proptypeGeneric.IsNullableType()) proptypeGeneric = proptypeGeneric.GenericTypeArguments.First();
|
if (proptypeGeneric.IsNullableType()) proptypeGeneric = proptypeGeneric.GetGenericArguments().First();
|
||||||
if (proptypeGeneric.IsEnum ||
|
if (proptypeGeneric.IsEnum ||
|
||||||
dicExecuteArrayRowReadClassOrTuple.ContainsKey(proptypeGeneric))
|
dicExecuteArrayRowReadClassOrTuple.ContainsKey(proptypeGeneric))
|
||||||
{
|
{
|
||||||
@ -1366,7 +1366,7 @@ namespace FreeSql.Internal
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var proptypeGeneric = readType;
|
var proptypeGeneric = readType;
|
||||||
if (proptypeGeneric.IsNullableType()) proptypeGeneric = proptypeGeneric.GenericTypeArguments.First();
|
if (proptypeGeneric.IsNullableType()) proptypeGeneric = proptypeGeneric.GetGenericArguments().First();
|
||||||
if (proptypeGeneric.IsEnum ||
|
if (proptypeGeneric.IsEnum ||
|
||||||
dicExecuteArrayRowReadClassOrTuple.ContainsKey(proptypeGeneric))
|
dicExecuteArrayRowReadClassOrTuple.ContainsKey(proptypeGeneric))
|
||||||
{
|
{
|
||||||
@ -1562,7 +1562,7 @@ namespace FreeSql.Internal
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
var typeOrg = type;
|
var typeOrg = type;
|
||||||
if (type.IsNullableType()) type = type.GenericTypeArguments.First();
|
if (type.IsNullableType()) type = type.GetGenericArguments().First();
|
||||||
if (type.IsEnum)
|
if (type.IsEnum)
|
||||||
return Expression.Block(
|
return Expression.Block(
|
||||||
Expression.IfThenElse(
|
Expression.IfThenElse(
|
||||||
|
@ -53,6 +53,9 @@ namespace FreeSql.MySql.Curd
|
|||||||
this.ClearData();
|
this.ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public override Task<List<T1>> ExecuteDeletedAsync()
|
async public override Task<List<T1>> ExecuteDeletedAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -91,5 +94,6 @@ namespace FreeSql.MySql.Curd
|
|||||||
this.ClearData();
|
this.ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,11 +16,8 @@ namespace FreeSql.MySql.Curd
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(5000, 3000);
|
|
||||||
public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000);
|
public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000);
|
||||||
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(5000, 3000);
|
|
||||||
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
|
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
|
||||||
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(5000, 3000);
|
|
||||||
|
|
||||||
|
|
||||||
protected override long RawExecuteIdentity()
|
protected override long RawExecuteIdentity()
|
||||||
@ -49,32 +46,6 @@ namespace FreeSql.MySql.Curd
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected override Task<long> RawExecuteIdentityAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
|
|
||||||
sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();");
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
long ret = 0;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng) ? trylng : 0;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
protected override List<T1> RawExecuteInserted()
|
protected override List<T1> RawExecuteInserted()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -111,6 +82,39 @@ namespace FreeSql.MySql.Curd
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(5000, 3000);
|
||||||
|
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(5000, 3000);
|
||||||
|
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(5000, 3000);
|
||||||
|
|
||||||
|
async protected override Task<long> RawExecuteIdentityAsync()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return 0;
|
||||||
|
|
||||||
|
sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();");
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
long ret = 0;
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng) ? trylng : 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -147,5 +151,6 @@ namespace FreeSql.MySql.Curd
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,10 +19,7 @@ namespace FreeSql.MySql.Curd
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 3000);
|
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(500, 3000);
|
|
||||||
|
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
@ -62,44 +59,6 @@ namespace FreeSql.MySql.Curd
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
|
|
||||||
ValidateVersionAndThrow(ret.Count);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -136,5 +95,50 @@ namespace FreeSql.MySql.Curd
|
|||||||
}
|
}
|
||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 3000);
|
||||||
|
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(500, 3000);
|
||||||
|
|
||||||
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
sb.Append(sql).Append(" RETURNING ");
|
||||||
|
|
||||||
|
var colidx = 0;
|
||||||
|
foreach (var col in _table.Columns.Values)
|
||||||
|
{
|
||||||
|
if (colidx > 0) sb.Append(", ");
|
||||||
|
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
|
++colidx;
|
||||||
|
}
|
||||||
|
sql = sb.ToString();
|
||||||
|
var dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var ret = new List<T1>();
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
|
||||||
|
ValidateVersionAndThrow(ret.Count);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;net452;net451;net45;net40</TargetFrameworks>
|
||||||
<Version>0.10.14</Version>
|
<Version>0.10.14</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
@ -21,13 +21,21 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="../../logo.png" Pack="true" PackagePath="\" />
|
<None Include="../../logo.png" Pack="true" PackagePath="\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="MySql.Data" Version="8.0.17" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net452'">
|
||||||
|
<PackageReference Include="MySql.Data" Version="8.0.17" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(TargetFramework)' == 'net451' or '$(TargetFramework)' == 'net45' or '$(TargetFramework)' == 'net40'">
|
||||||
|
<PackageReference Include="MySql.Data" Version="6.9.12" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
|
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
|
||||||
|
<DefineConstants>net40</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -138,6 +138,8 @@ namespace FreeSql.MySql
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public Task OnGetAsync(Object<DbConnection> obj)
|
async public Task OnGetAsync(Object<DbConnection> obj)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -165,6 +167,7 @@ namespace FreeSql.MySql
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public void OnGetTimeout()
|
public void OnGetTimeout()
|
||||||
{
|
{
|
||||||
@ -211,6 +214,9 @@ namespace FreeSql.MySql
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -225,5 +231,6 @@ namespace FreeSql.MySql
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,11 @@ namespace FreeSql.MySql
|
|||||||
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
||||||
if (type.IsArray) return null;
|
if (type.IsArray) return null;
|
||||||
var enumType = type.IsEnum ? type : null;
|
var enumType = type.IsEnum ? type : null;
|
||||||
if (enumType == null && type.IsNullableType() && type.GenericTypeArguments.Length == 1 && type.GenericTypeArguments.First().IsEnum) enumType = type.GenericTypeArguments.First();
|
if (enumType == null && type.IsNullableType())
|
||||||
|
{
|
||||||
|
var genericTypes = type.GetGenericArguments();
|
||||||
|
if (genericTypes.Length == 1 && genericTypes.First().IsEnum) enumType = genericTypes.First();
|
||||||
|
}
|
||||||
if (enumType != null)
|
if (enumType != null)
|
||||||
{
|
{
|
||||||
var names = string.Join(",", Enum.GetNames(enumType).Select(a => _commonUtils.FormatSql("{0}", a)));
|
var names = string.Join(",", Enum.GetNames(enumType).Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
|
@ -377,7 +377,7 @@ namespace FreeSql.MySql
|
|||||||
case "AddTicks": return $"date_add({left}, interval ({args1})/10 microsecond)";
|
case "AddTicks": return $"date_add({left}, interval ({args1})/10 microsecond)";
|
||||||
case "AddYears": return $"date_add({left}, interval ({args1}) year)";
|
case "AddYears": return $"date_add({left}, interval ({args1}) year)";
|
||||||
case "Subtract":
|
case "Subtract":
|
||||||
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GenericTypeArguments.FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
||||||
{
|
{
|
||||||
case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})";
|
case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})";
|
||||||
case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)";
|
case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)";
|
||||||
|
@ -43,6 +43,7 @@ namespace FreeSql.MySql
|
|||||||
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
|
public IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IUpdate<T1> Update<T1>() where T1 : class => new MySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IUpdate<T1> Update<T1>() where T1 : class => new MySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new MySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new MySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||||
public IDelete<T1> Delete<T1>() where T1 : class => new MySqlDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IDelete<T1> Delete<T1>() where T1 : class => new MySqlDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
|
@ -37,5 +37,5 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
|
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -16,6 +16,10 @@ namespace FreeSql.Odbc.Default
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
public override Task<List<T1>> ExecuteDeletedAsync() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
public override Task<List<T1>> ExecuteDeletedAsync() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,11 +20,8 @@ namespace FreeSql.Odbc.Default
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_utils.Adapter.InsertBatchSplitLimit, 255);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
|
||||||
public override long ExecuteIdentity() => base.SplitExecuteIdentity(_utils.Adapter.InsertBatchSplitLimit, 255);
|
public override long ExecuteIdentity() => base.SplitExecuteIdentity(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
|
||||||
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(_utils.Adapter.InsertBatchSplitLimit, 255);
|
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
|
||||||
|
|
||||||
protected override long RawExecuteIdentity()
|
protected override long RawExecuteIdentity()
|
||||||
{
|
{
|
||||||
@ -63,6 +60,15 @@ namespace FreeSql.Odbc.Default
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteInserted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
|
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
|
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
|
|
||||||
async protected override Task<long> RawExecuteIdentityAsync()
|
async protected override Task<long> RawExecuteIdentityAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -100,8 +106,7 @@ namespace FreeSql.Odbc.Default
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override List<T1> RawExecuteInserted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
|
||||||
protected override Task<List<T1>> RawExecuteInsertedAsync() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
protected override Task<List<T1>> RawExecuteInsertedAsync() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,12 +20,9 @@ namespace FreeSql.Odbc.Default
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_utils.Adapter.InsertBatchSplitLimit, 255);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_utils.Adapter.InsertBatchSplitLimit, 255);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -60,5 +57,13 @@ namespace FreeSql.Odbc.Default
|
|||||||
++pkidx;
|
++pkidx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
|
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(_utils.Adapter.InsertBatchSplitLimit, 255);
|
||||||
|
|
||||||
|
protected override Task<List<T1>> RawExecuteUpdatedAsync() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,6 +144,8 @@ namespace FreeSql.Odbc.Default
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public Task OnGetAsync(Object<DbConnection> obj)
|
async public Task OnGetAsync(Object<DbConnection> obj)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -172,6 +174,7 @@ namespace FreeSql.Odbc.Default
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public void OnGetTimeout()
|
public void OnGetTimeout()
|
||||||
{
|
{
|
||||||
@ -218,6 +221,9 @@ namespace FreeSql.Odbc.Default
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -232,5 +238,6 @@ namespace FreeSql.Odbc.Default
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,11 @@ namespace FreeSql.Odbc.Default
|
|||||||
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
||||||
if (type.IsArray) return null;
|
if (type.IsArray) return null;
|
||||||
var enumType = type.IsEnum ? type : null;
|
var enumType = type.IsEnum ? type : null;
|
||||||
if (enumType == null && type.IsNullableType() && type.GenericTypeArguments.Length == 1 && type.GenericTypeArguments.First().IsEnum) enumType = type.GenericTypeArguments.First();
|
if (enumType == null && type.IsNullableType())
|
||||||
|
{
|
||||||
|
var genericTypes = type.GetGenericArguments();
|
||||||
|
if (genericTypes.Length == 1 && genericTypes.First().IsEnum) enumType = genericTypes.First();
|
||||||
|
}
|
||||||
if (enumType != null)
|
if (enumType != null)
|
||||||
{
|
{
|
||||||
var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
||||||
|
@ -356,7 +356,7 @@ namespace FreeSql.Odbc.Default
|
|||||||
case "AddTicks": return _utils.Adapter.LambdaDateTime_AddTicks(left, args1);
|
case "AddTicks": return _utils.Adapter.LambdaDateTime_AddTicks(left, args1);
|
||||||
case "AddYears": return _utils.Adapter.LambdaDateTime_AddYears(left, args1);
|
case "AddYears": return _utils.Adapter.LambdaDateTime_AddYears(left, args1);
|
||||||
case "Subtract":
|
case "Subtract":
|
||||||
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GenericTypeArguments.FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
||||||
{
|
{
|
||||||
case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1);
|
case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1);
|
||||||
case "System.TimeSpan": return _utils.Adapter.LambdaDateTime_SubtractTimeSpan(left, args1);
|
case "System.TimeSpan": return _utils.Adapter.LambdaDateTime_SubtractTimeSpan(left, args1);
|
||||||
|
@ -18,6 +18,7 @@ namespace FreeSql.Odbc.Default
|
|||||||
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
|
public IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||||
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks>
|
||||||
<Version>0.10.14</Version>
|
<Version>0.10.14</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
@ -29,6 +29,10 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
|
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(TargetFramework)' == 'net40'">
|
||||||
|
<DefineConstants>net40</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
@ -53,6 +53,9 @@ namespace FreeSql.Odbc.MySql
|
|||||||
this.ClearData();
|
this.ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public override Task<List<T1>> ExecuteDeletedAsync()
|
async public override Task<List<T1>> ExecuteDeletedAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -91,5 +94,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
this.ClearData();
|
this.ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,8 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(5000, 3000);
|
|
||||||
public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000);
|
public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000);
|
||||||
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(5000, 3000);
|
|
||||||
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
|
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
|
||||||
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(5000, 3000);
|
|
||||||
|
|
||||||
|
|
||||||
protected override long RawExecuteIdentity()
|
protected override long RawExecuteIdentity()
|
||||||
@ -62,43 +59,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected override Task<long> RawExecuteIdentityAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
|
|
||||||
Object<DbConnection> poolConn = null;
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
long ret = 0;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var conn = _connection;
|
|
||||||
if (_transaction != null) conn = _transaction.Connection;
|
|
||||||
if (conn == null)
|
|
||||||
{
|
|
||||||
poolConn = _orm.Ado.MasterPool.Get();
|
|
||||||
conn = poolConn.Value;
|
|
||||||
}
|
|
||||||
await _orm.Ado.ExecuteNonQueryAsync(conn, _transaction, CommandType.Text, sql, _params);
|
|
||||||
ret = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(conn, _transaction, CommandType.Text, "SELECT LAST_INSERT_ID()")), out var trylng) ? trylng : 0;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (poolConn != null)
|
|
||||||
_orm.Ado.MasterPool.Return(poolConn);
|
|
||||||
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
protected override List<T1> RawExecuteInserted()
|
protected override List<T1> RawExecuteInserted()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -135,6 +95,50 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(5000, 3000);
|
||||||
|
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(5000, 3000);
|
||||||
|
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(5000, 3000);
|
||||||
|
|
||||||
|
async protected override Task<long> RawExecuteIdentityAsync()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return 0;
|
||||||
|
|
||||||
|
Object<DbConnection> poolConn = null;
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
long ret = 0;
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var conn = _connection;
|
||||||
|
if (_transaction != null) conn = _transaction.Connection;
|
||||||
|
if (conn == null)
|
||||||
|
{
|
||||||
|
poolConn = _orm.Ado.MasterPool.Get();
|
||||||
|
conn = poolConn.Value;
|
||||||
|
}
|
||||||
|
await _orm.Ado.ExecuteNonQueryAsync(conn, _transaction, CommandType.Text, sql, _params);
|
||||||
|
ret = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(conn, _transaction, CommandType.Text, "SELECT LAST_INSERT_ID()")), out var trylng) ? trylng : 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (poolConn != null)
|
||||||
|
_orm.Ado.MasterPool.Return(poolConn);
|
||||||
|
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -171,5 +175,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 3000);
|
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(500, 3000);
|
|
||||||
|
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
@ -62,44 +60,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
|
|
||||||
ValidateVersionAndThrow(ret.Count);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -136,5 +96,50 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 3000);
|
||||||
|
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(500, 3000);
|
||||||
|
|
||||||
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
sb.Append(sql).Append(" RETURNING ");
|
||||||
|
|
||||||
|
var colidx = 0;
|
||||||
|
foreach (var col in _table.Columns.Values)
|
||||||
|
{
|
||||||
|
if (colidx > 0) sb.Append(", ");
|
||||||
|
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
|
++colidx;
|
||||||
|
}
|
||||||
|
sql = sb.ToString();
|
||||||
|
var dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var ret = new List<T1>();
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
|
||||||
|
ValidateVersionAndThrow(ret.Count);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,6 +138,8 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public Task OnGetAsync(Object<DbConnection> obj)
|
async public Task OnGetAsync(Object<DbConnection> obj)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -165,6 +167,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public void OnGetTimeout()
|
public void OnGetTimeout()
|
||||||
{
|
{
|
||||||
@ -211,6 +214,9 @@ namespace FreeSql.Odbc.MySql
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -225,5 +231,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,11 @@ namespace FreeSql.Odbc.MySql
|
|||||||
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
||||||
if (type.IsArray) return null;
|
if (type.IsArray) return null;
|
||||||
var enumType = type.IsEnum ? type : null;
|
var enumType = type.IsEnum ? type : null;
|
||||||
if (enumType == null && type.IsNullableType() && type.GenericTypeArguments.Length == 1 && type.GenericTypeArguments.First().IsEnum) enumType = type.GenericTypeArguments.First();
|
if (enumType == null && type.IsNullableType())
|
||||||
|
{
|
||||||
|
var genericTypes = type.GetGenericArguments();
|
||||||
|
if (genericTypes.Length == 1 && genericTypes.First().IsEnum) enumType = genericTypes.First();
|
||||||
|
}
|
||||||
if (enumType != null)
|
if (enumType != null)
|
||||||
{
|
{
|
||||||
var names = string.Join(",", Enum.GetNames(enumType).Select(a => _commonUtils.FormatSql("{0}", a)));
|
var names = string.Join(",", Enum.GetNames(enumType).Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
|
@ -377,7 +377,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
case "AddTicks": return $"date_add({left}, interval ({args1})/10 microsecond)";
|
case "AddTicks": return $"date_add({left}, interval ({args1})/10 microsecond)";
|
||||||
case "AddYears": return $"date_add({left}, interval ({args1}) year)";
|
case "AddYears": return $"date_add({left}, interval ({args1}) year)";
|
||||||
case "Subtract":
|
case "Subtract":
|
||||||
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GenericTypeArguments.FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
||||||
{
|
{
|
||||||
case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})";
|
case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})";
|
||||||
case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)";
|
case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)";
|
||||||
|
@ -21,6 +21,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
|
public IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcMySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcMySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcMySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcMySqlUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||||
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcMySqlDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcMySqlDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
|
@ -19,9 +19,13 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
public override Task<List<T1>> ExecuteDeletedAsync()
|
public override Task<List<T1>> ExecuteDeletedAsync()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,8 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 999);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 999);
|
|
||||||
public override long ExecuteIdentity() => base.SplitExecuteIdentity(500, 999);
|
public override long ExecuteIdentity() => base.SplitExecuteIdentity(500, 999);
|
||||||
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(500, 999);
|
|
||||||
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(500, 999);
|
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(500, 999);
|
||||||
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(500, 999);
|
|
||||||
|
|
||||||
|
|
||||||
public override string ToSql()
|
public override string ToSql()
|
||||||
{
|
{
|
||||||
@ -137,6 +133,22 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteInserted()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
||||||
|
|
||||||
|
this.RawExecuteAffrows();
|
||||||
|
return _source;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 999);
|
||||||
|
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(500, 999);
|
||||||
|
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(500, 999);
|
||||||
|
|
||||||
async protected override Task<long> RawExecuteIdentityAsync()
|
async protected override Task<long> RawExecuteIdentityAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -190,15 +202,6 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override List<T1> RawExecuteInserted()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
this.RawExecuteAffrows();
|
|
||||||
return _source;
|
|
||||||
}
|
|
||||||
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -207,5 +210,6 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
await this.RawExecuteAffrowsAsync();
|
await this.RawExecuteAffrowsAsync();
|
||||||
return _source;
|
return _source;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,19 +19,13 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(200, 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(200, 999);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(200, 999);
|
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(200, 999);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(200, 999);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(200, 999);
|
|
||||||
|
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -68,5 +62,16 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(200, 999);
|
||||||
|
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(200, 999);
|
||||||
|
|
||||||
|
protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,6 +155,8 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public Task OnGetAsync(Object<DbConnection> obj)
|
async public Task OnGetAsync(Object<DbConnection> obj)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -182,6 +184,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public void OnGetTimeout()
|
public void OnGetTimeout()
|
||||||
{
|
{
|
||||||
@ -228,6 +231,9 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -242,5 +248,6 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,11 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (int, string, string, bool?, object)?(((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
||||||
if (type.IsArray) return null;
|
if (type.IsArray) return null;
|
||||||
var enumType = type.IsEnum ? type : null;
|
var enumType = type.IsEnum ? type : null;
|
||||||
if (enumType == null && type.IsNullableType() && type.GenericTypeArguments.Length == 1 && type.GenericTypeArguments.First().IsEnum) enumType = type.GenericTypeArguments.First();
|
if (enumType == null && type.IsNullableType())
|
||||||
|
{
|
||||||
|
var genericTypes = type.GetGenericArguments();
|
||||||
|
if (genericTypes.Length == 1 && genericTypes.First().IsEnum) enumType = genericTypes.First();
|
||||||
|
}
|
||||||
if (enumType != null)
|
if (enumType != null)
|
||||||
{
|
{
|
||||||
var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
||||||
@ -90,7 +94,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
|
|
||||||
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
||||||
if (tboldname?.Length == 1) tboldname = new[] { userId, tboldname[0] };
|
if (tboldname?.Length == 1) tboldname = new[] { userId, tboldname[0] };
|
||||||
var primaryKeyName = entityType.GetCustomAttribute<OraclePrimaryKeyNameAttribute>()?.Name;
|
var primaryKeyName = (entityType.GetCustomAttributes(typeof(OraclePrimaryKeyNameAttribute), false)?.FirstOrDefault() as OraclePrimaryKeyNameAttribute)?.Name;
|
||||||
|
|
||||||
if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
|
if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
|
||||||
throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}");
|
throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}");
|
||||||
|
@ -379,7 +379,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
case "AddTicks": return $"({left}+({args1})/864000000000)";
|
case "AddTicks": return $"({left}+({args1})/864000000000)";
|
||||||
case "AddYears": return $"add_months({left},({args1})*12)";
|
case "AddYears": return $"add_months({left},({args1})*12)";
|
||||||
case "Subtract":
|
case "Subtract":
|
||||||
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GenericTypeArguments.FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
||||||
{
|
{
|
||||||
case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')";
|
case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')";
|
||||||
case "System.TimeSpan": return $"({left}-{args1})";
|
case "System.TimeSpan": return $"({left}-{args1})";
|
||||||
|
@ -16,6 +16,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
|
public IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcOracleUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcOracleUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcOracleUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcOracleUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||||
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcOracleDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcOracleDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
|
@ -53,6 +53,9 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
this.ClearData();
|
this.ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public override Task<List<T1>> ExecuteDeletedAsync()
|
async public override Task<List<T1>> ExecuteDeletedAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -91,5 +94,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
this.ClearData();
|
this.ClearData();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,8 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(5000, 3000);
|
|
||||||
public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000);
|
public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000);
|
||||||
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(5000, 3000);
|
|
||||||
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
|
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(5000, 3000);
|
||||||
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(5000, 3000);
|
|
||||||
|
|
||||||
|
|
||||||
protected override long RawExecuteIdentity()
|
protected override long RawExecuteIdentity()
|
||||||
{
|
{
|
||||||
@ -73,6 +69,50 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteInserted()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
sb.Append(sql).Append(" RETURNING ");
|
||||||
|
|
||||||
|
var colidx = 0;
|
||||||
|
foreach (var col in _table.Columns.Values)
|
||||||
|
{
|
||||||
|
if (colidx > 0) sb.Append(", ");
|
||||||
|
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
|
++colidx;
|
||||||
|
}
|
||||||
|
sql = sb.ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var ret = new List<T1>();
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, _params);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(5000, 3000);
|
||||||
|
public override Task<long> ExecuteIdentityAsync() => base.SplitExecuteIdentityAsync(5000, 3000);
|
||||||
|
public override Task<List<T1>> ExecuteInsertedAsync() => base.SplitExecuteInsertedAsync(5000, 3000);
|
||||||
|
|
||||||
async protected override Task<long> RawExecuteIdentityAsync()
|
async protected override Task<long> RawExecuteIdentityAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -122,43 +162,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override List<T1> RawExecuteInserted()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, _params);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
async protected override Task<List<T1>> RawExecuteInsertedAsync()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
var sql = this.ToSql();
|
||||||
@ -195,5 +198,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,10 +19,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000);
|
||||||
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 3000);
|
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(500, 3000);
|
|
||||||
|
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
@ -62,44 +59,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
|
|
||||||
ValidateVersionAndThrow(ret.Count);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_orm.Aop.CurdAfter?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -145,5 +104,50 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
|
|
||||||
sb.Append("::").Append(dbtype);
|
sb.Append("::").Append(dbtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
public override Task<int> ExecuteAffrowsAsync() => base.SplitExecuteAffrowsAsync(500, 3000);
|
||||||
|
public override Task<List<T1>> ExecuteUpdatedAsync() => base.SplitExecuteUpdatedAsync(500, 3000);
|
||||||
|
|
||||||
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync()
|
||||||
|
{
|
||||||
|
var sql = this.ToSql();
|
||||||
|
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
sb.Append(sql).Append(" RETURNING ");
|
||||||
|
|
||||||
|
var colidx = 0;
|
||||||
|
foreach (var col in _table.Columns.Values)
|
||||||
|
{
|
||||||
|
if (colidx > 0) sb.Append(", ");
|
||||||
|
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
|
++colidx;
|
||||||
|
}
|
||||||
|
sql = sb.ToString();
|
||||||
|
var dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
|
var ret = new List<T1>();
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
|
||||||
|
ValidateVersionAndThrow(ret.Count);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfter?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,6 +150,8 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public Task OnGetAsync(Object<DbConnection> obj)
|
async public Task OnGetAsync(Object<DbConnection> obj)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -177,6 +179,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public void OnGetTimeout()
|
public void OnGetTimeout()
|
||||||
{
|
{
|
||||||
@ -223,6 +226,9 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
async public static Task<bool> PingAsync(this DbConnection that, bool isThrow = false)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -237,5 +243,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,11 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (OdbcType, string, string, bool?, object)?((trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
if (_dicCsToDb.TryGetValue(type.FullName, out var trydc)) return new (OdbcType, string, string, bool?, object)?((trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue));
|
||||||
if (type.IsArray) return null;
|
if (type.IsArray) return null;
|
||||||
var enumType = type.IsEnum ? type : null;
|
var enumType = type.IsEnum ? type : null;
|
||||||
if (enumType == null && type.IsNullableType() && type.GenericTypeArguments.Length == 1 && type.GenericTypeArguments.First().IsEnum) enumType = type.GenericTypeArguments.First();
|
if (enumType == null && type.IsNullableType())
|
||||||
|
{
|
||||||
|
var genericTypes = type.GetGenericArguments();
|
||||||
|
if (genericTypes.Length == 1 && genericTypes.First().IsEnum) enumType = genericTypes.First();
|
||||||
|
}
|
||||||
if (enumType != null)
|
if (enumType != null)
|
||||||
{
|
{
|
||||||
var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
||||||
|
@ -465,7 +465,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
case "AddTicks": return $"(({left})::timestamp+(({args1})/10||' microseconds')::interval)";
|
case "AddTicks": return $"(({left})::timestamp+(({args1})/10||' microseconds')::interval)";
|
||||||
case "AddYears": return $"(({left})::timestamp+(({args1})||' year')::interval)";
|
case "AddYears": return $"(({left})::timestamp+(({args1})||' year')::interval)";
|
||||||
case "Subtract":
|
case "Subtract":
|
||||||
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GenericTypeArguments.FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName)
|
||||||
{
|
{
|
||||||
case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)";
|
case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)";
|
||||||
case "System.TimeSpan": return $"(({left})::timestamp-(({args1})||' microseconds')::interval)";
|
case "System.TimeSpan": return $"(({left})::timestamp-(({args1})||' microseconds')::interval)";
|
||||||
|
@ -19,6 +19,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1 source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(T1[] source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
public IInsert<T1> Insert<T1>(List<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
|
public IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class => this.Insert<T1>().AppendData(source);
|
||||||
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcPostgreSQLUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IUpdate<T1> Update<T1>() where T1 : class => new OdbcPostgreSQLUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcPostgreSQLUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => new OdbcPostgreSQLUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||||
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcPostgreSQLDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
public IDelete<T1> Delete<T1>() where T1 : class => new OdbcPostgreSQLDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, null);
|
||||||
|
@ -47,13 +47,17 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
var elementType = type.GetElementType();
|
var elementType = type.GetElementType();
|
||||||
Type enumType = null;
|
Type enumType = null;
|
||||||
if (elementType.IsEnum) enumType = elementType;
|
if (elementType.IsEnum) enumType = elementType;
|
||||||
else if (elementType.IsNullableType() && elementType.GenericTypeArguments.First().IsEnum) enumType = elementType.GenericTypeArguments.First();
|
else if (elementType.IsNullableType())
|
||||||
|
{
|
||||||
|
var genericTypesFirst = elementType.GetGenericArguments().First();
|
||||||
|
if (genericTypesFirst.IsEnum) enumType = genericTypesFirst;
|
||||||
|
}
|
||||||
if (enumType != null) return enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
if (enumType != null) return enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
||||||
getParamterArrayValue(typeof(long), value, elementType.IsEnum ? null : Enum.GetValues(enumType).GetValue(0)) :
|
getParamterArrayValue(typeof(long), value, elementType.IsEnum ? null : Enum.GetValues(enumType).GetValue(0)) :
|
||||||
getParamterArrayValue(typeof(int), value, elementType.IsEnum ? null : Enum.GetValues(enumType).GetValue(0));
|
getParamterArrayValue(typeof(int), value, elementType.IsEnum ? null : Enum.GetValues(enumType).GetValue(0));
|
||||||
return dicGetParamterValue.TryGetValue(type.FullName, out var trydicarr) ? trydicarr(value) : value;
|
return dicGetParamterValue.TryGetValue(type.FullName, out var trydicarr) ? trydicarr(value) : value;
|
||||||
}
|
}
|
||||||
if (type.IsNullableType()) type = type.GenericTypeArguments.First();
|
if (type.IsNullableType()) type = type.GetGenericArguments().First();
|
||||||
if (type.IsEnum) return (int)value;
|
if (type.IsEnum) return (int)value;
|
||||||
if (dicGetParamterValue.TryGetValue(type.FullName, out var trydic)) return trydic(value);
|
if (dicGetParamterValue.TryGetValue(type.FullName, out var trydic)) return trydic(value);
|
||||||
return value;
|
return value;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user