DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.24k stars 1.33k forks source link

大神你好,我又来了.有没有办法支持这种Select()的动态属性写法 #1156

Closed hmy4677 closed 1 year ago

hmy4677 commented 1 year ago
    public async Task<dynamic> GetDataAsync()
    {
        var groupData1 = await GetGroupDataAsync(p => p.SourceId);
        var groupData2 = await GetGroupDataAsync(p => p.ProjId);
        var groupData3 = await GetGroupDataAsync(p => p.ConsultId);

        return (groupData1, groupData2, groupData3);
    }

    public async Task<dynamic> GetGroupDataAsync<T>(Func<PatientMakeEntity, T> prop)
    {
        return await _db.Queryable<PatientMakeEntity>()
            .Select(p => new
            {
                p.Id,
                GroupId = prop(p) //动态的属性
            }).MergeTable()
            .GroupBy(p => p.GroupId)
            .Select(p => new
            {
                p.GroupId,
                Count = SqlFunc.AggregateCount(p)
            }).ToListAsync();
    }
DotNetNext commented 1 year ago
 public async Task<dynamic> GetGroupDataAsync<T>(Expression<Func<Order, T>> prop)
        {

            var name=ExpressionTool.GetMemberName(prop);
            name = _db.EntityMaintenance.GetDbColumnName<T>(name);
            return await _db.Queryable<Order>()
                .Select(p => new
                {
                    p.Id,
                    GroupId = SqlFunc.MappingColumn<T>(name) //动态的属性
                }).MergeTable()
                .GroupBy(p => p.GroupId)
                .Select(p => new
                {
                    p.GroupId,
                    Count = SqlFunc.AggregateCount(p)
                }).ToListAsync();
        }
DotNetNext commented 1 year ago

用这个就行了

hmy4677 commented 1 year ago

感谢