Skip to content

Commit bbaf947

Browse files
committed
- 增加 ToDataTableByPropertyName 动态查询功能;
1 parent 8a83fea commit bbaf947

File tree

5 files changed

+37
-192
lines changed

5 files changed

+37
-192
lines changed

FreeSql.DbContext/FreeSql.DbContext.xml

Lines changed: 0 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Threading.Tasks;
1010
using System.Text;
1111
using Xunit;
12+
using FreeSql.Internal.CommonProvider;
1213

1314
namespace FreeSql.Tests.Sqlite
1415
{
@@ -149,6 +150,7 @@ public void ToDataTable()
149150
var dt1 = select.Limit(10).ToDataTable();
150151
var dt2 = select.Limit(10).ToDataTable("id, 111222");
151152
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
153+
var dt4 = select.Limit(10).ToDataTableByPropertyName(new[] { "a.Id", "a.Type.Name", "Title", "clicks" });
152154
}
153155
class TestDto
154156
{
@@ -368,6 +370,9 @@ public void LeftJoin()
368370
var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid);
369371
var sql = query.ToSql().Replace("\r\n", "");
370372
Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TypeGuid\"", sql);
373+
(query as Select0Provider)._tables.Where(a => a.Table.Type == typeof(TestTypeInfo))
374+
.First()
375+
.Type = SelectTableInfoType.InnerJoin;
371376
query.ToList();
372377

373378
query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx");

FreeSql/FreeSql.xml

Lines changed: 7 additions & 183 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql/Interface/Curd/ISelect/ISelect0.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ public partial interface ISelect0<TSelect, T1> : ISelect0
7272
/// </summary>
7373
/// <returns></returns>
7474
DataTable ToDataTable(string field = null);
75+
/// <summary>
76+
/// 执行SQL查询,返回 properties 指定的实体类属性,并以 DataTable 接收
77+
/// </summary>
78+
/// <param name="properties">属性名:Name<para></para>导航属性:Parent.Name<para></para>多表:b.Name</param>
79+
/// <returns></returns>
80+
DataTable ToDataTableByPropertyName(string[] properties);
7581

7682
/// <summary>
7783
/// 以字典的形式返回查询结果<para></para>

FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,25 @@ namespace FreeSql.Internal.CommonProvider
1919
{
2020
partial class Select0Provider<TSelect, T1>
2121
{
22+
public DataTable ToDataTableByPropertyName(string[] properties)
23+
{
24+
if (properties?.Any() != true) throw new ArgumentException($"properties 参数不能为空");
25+
var sbfield = new StringBuilder();
26+
for (var propIdx = 0; propIdx < properties.Length; propIdx++)
27+
{
28+
var property = properties[propIdx];
29+
var exp = ConvertStringPropertyToExpression(property);
30+
if (exp == null) throw new Exception($"{property} 属性名无法找到");
31+
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null);
32+
if (propIdx > 0) sbfield.Append(", ");
33+
sbfield.Append(field);
34+
//if (field != property)
35+
sbfield.Append(_commonUtils.FieldAsAlias(_commonUtils.QuoteSqlName("test").Replace("test", property)));
36+
}
37+
var sbfieldStr = sbfield.ToString();
38+
sbfield.Clear();
39+
return ToDataTable(sbfieldStr);
40+
}
2241
public DataTable ToDataTable(string field = null)
2342
{
2443
DataTable ret = null;

0 commit comments

Comments
 (0)