相关疑难解决方法(0)

IEnumerable Group按用户指定的动态键列表

我有一个类似的课程

public class Empolyee
{
    public string Designation {get ;set;}
    public string Discipline {get ;set;}
    public int Scale {get ;set;}
    public DateTime DOB {get ;set;}
    public int Sales {get ;set;}
}
Run Code Online (Sandbox Code Playgroud)

并以可数的说法记录所有员工的记录

List<Employee> Employees;
Run Code Online (Sandbox Code Playgroud)

和一个字符串键列表

var Keys = new List<string>()
{
    "Designation",
    "Scale",
    "DOB"
};
Run Code Online (Sandbox Code Playgroud)

假设列表"Keys"的元素是用户指定的,用户可以指定no或许多关键元素.

现在我想使用列表"Keys"中指定的键对所有"Employees"进行分组,并仅选择"Keys"中指定的属性以及每个组的Sales of Sum.

在我尝试使用的3个解决方案中,以下看起来适用但无法使用它,因为不知道列表"Keys"将如何转换为匿名类型

Employees.GroupBy(e => new { e.Key1, e.Key2, ... })
    .Select(group => new {
        Key1 = group.Key.Key1,
        Key2 = group.Key.Key2,
        ...
        TotalSales = group.Select(employee => employee.Sales).Sum()
    });
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc ienumerable lambda

11
推荐指数
1
解决办法
2421
查看次数

C#LINQ - 如何动态构建Group By子句

我正在处理用户可以选择他/她想要在屏幕上看到的列以及要分组或聚合的列的应用程序.因此,在我的LINQ部分中,我实际上应该将包含列名的变量传递给group by和aggregate子句.请记住,DataTable dt每次可能包含不同的数据(例如员工信息,采购订单,绩效统计等).我只能通过dt.Columns[i].ColumnName和运行时获取有关数据的信息dt.Columns[i].DataType.Name.任何人都可以建议如何做到这一点,我需要的是这样的事情:

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);

        var query = from row in dt.AsEnumerable()
                    group row by new
                    {
                        foreach(DataColumn column in dt.Columns)
                        {
                           row[column.ColumnName];                          
                        }
                    } into grp

                    select new
                    {
                        foreach(DataColumn column in dt.Columns)
                        {
                           if(column.DataType.Name == "Decimal")
                           {
                             Sum(grp[column.ColumnName]);
                           }else{
                             grp[column.ColumnName];
                           }

                        }
                    };
Run Code Online (Sandbox Code Playgroud)

c# linq group-by aggregate dynamic-linq

5
推荐指数
1
解决办法
8363
查看次数

Linq GroupBy - 如何在运行时指定分组键?

是否有一种很好的方法可以GroupBy在运行时确定分组键的Linq ?例如,我希望从用户选择的字段列表构建分组键 - 你能这样做吗?我知道我可以很容易地做到这一点,如果我转换一切字串的表,但我想知道是否有其他方式来完成这个优雅的或聪明的办法.

class Item
{
    public int A, B;
    public DateTime D;
    public double X, Y, Z;
}
Run Code Online (Sandbox Code Playgroud)

List<Item>有个叫data.我想要做的事情一样检索的总和X按分组A,或的总和X,Y以及Z通过分组AB.但是应该能够以某种方式在运行时指定哪些字段进入分组.

c# linq group-by

3
推荐指数
2
解决办法
2760
查看次数

标签 统计

c# ×3

group-by ×2

linq ×2

.net ×1

aggregate ×1

asp.net-mvc ×1

dynamic-linq ×1

ienumerable ×1

lambda ×1