LINQ Group by column name作为参数传递 - LINQ TO SQL

时间:2017-03-20 07:28:59

标签: c# visual-studio linq visual-studio-2015 linq-to-sql

考虑LINQ代码:

 var objs = (ClientsDB.Context.ClientProcessed.GroupBy(grp => new
            {
                City = grp.City,
                Day = grp.Insert_Date.Value.Day,
                Month = grp.Insert_Date.Value.Month,
                Year = grp.Insert_Date.Value.Year
            })....



var objs = (ClientsDB.Context.ClientProcessed.GroupBy(grp => new
        {
            Department = grp.Department,
            Day = grp.Insert_Date.Value.Day,
            Month = grp.Insert_Date.Value.Month,
            Year = grp.Insert_Date.Value.Year
        })....


var objs = (ClientsDB.Context.ClientProcessed.GroupBy(grp => new
{
    State = grp.State,
    Day = grp.Insert_Date.Value.Day,
    Month = grp.Insert_Date.Value.Month,
    Year = grp.Insert_Date.Value.Year
})....

如何通过作为字符串传递的特定列完成GroupBy?

例如:

String grpByParam = "City"; // grpByParam = "State"; // String grpByParam = "Department";

然后将该参数传递给linq查询,而不是一次又一次地复制LINQ查询。

仅供参考,我需要它作为LINQ-TO-SQL而不是LINQ-TO-OBJECTS查询,这意味着我希望过滤在DB中完成,而不是在内存中完成。

这可能吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以检查字符串值并根据

调用GroupBy
if (grpByParam.Equals("City")) {
    result = source.GroupBy(a => a.City);
} ...

您可以实现一个方法,该方法采用source(不含GroupBy的LINQ查询)和return resultGroupBy的结果)

  

此方法通过使用延迟执行来实现。眼前的   返回值是存储所有信息的对象   需要执行操作。此方法表示的查询   在通过调用对象枚举对象之前不会执行   直接使用GetEnumerator方法或在Visual C#或For中使用foreach   每个都在Visual Basic中。

<{3>}中的