按属性分类的正确方法

  • 本文关键字:方法 属性 分类 c# linq
  • 更新时间 :
  • 英文 :


我做了一个按属性分类(或组)的 C# LINQ 查询,我几乎可以肯定有更好的方法。我的项目充满了这些查询,所以我对如何以正确的方式实现这一目标非常感兴趣。

这是我的查询的样子:

var g = _repository.GetEmployees();
var result = 
    g.GroupBy(x => x.City, (key, group) => group.First())
    .Select(x => new { 
        city = x.City,
        employees = g
            .Where(y=>y.EmployeeID == x.EmployeeID)
            .Select(y=> new {
                fullname = y.FirstName + " " + y.LastName,
                title = y.Title
            })
            .OrderBy(y=>y.fullname)
    })
    .OrderBy(x => x.city);

JSON 输出示例:

[
    {
        "city":"Barcelona",
        "employees":[
            {
                "fullname":"Foo Bar",
                "title":"Help Desk Technician"
            },
            {
                "fullname":"Lorem Ipsum",
                "title":"Information Technology Director"
            }
        ]
    },
    {
        "city":"London",
        "employees":[
            {
                "fullname":"Le Query",
                "title":"Information Technology Manager"
            },
            {
                "fullname":"Please Help",
                "title":"Management Information Systems Director"
            }
        ]
    }
]

结果很好。实现它的最佳方法是什么?

听起来你只是想要:

var result = g.GroupBy(x => x.City, (key, group) => new {
                           city = key,
                           employees = group.Select(emp => new {
                               fullname = emp.FirstName + " " + emp.LastName,
                               title = emp.Title
                           })
                       });

换句话说,你只是为每个组提供一个投影,即"城市和该城市的所有员工的匿名类型"。

最新更新