C# - 按公共属性对对象进行分组
C# - 按公共属性对对象进行分组
我从一个查询中得到了这个结果表格:
Id | Name | ApplicationUserId | JobTypeId
----------|------------|-------------------|------------
6000000 | A | 4327428 | 234
6000000 | A | 8764328 | 232
6000001 | B | 1238474 | 456
6000001 | B | 8743428 | 432
6000001 | B | 9292384 | 122
我使用了EF的原始SQL查询,像这样:
db.Database.SqlQuery
如何从这个结果表格中提取共同的值并返回一个对象,对象的结构如下:
[
{
"Id": 6000000, "Name": "A", "Therapists":
[
{"Id":"4327428", "JobTypeId": 234},
{"Id":"8764328", "JobTypeId": 232}
]
},
{
"Id": 6000001, "Name": "B", "Therapists":
[
{"Id":"1238474", "JobTypeId": 456},
{"Id":"8743428","JobTypeId": 432},
{"Id":"9292384", "JobTypeId": 122}
]
}
]
返回的对象可以是Json或其他类型的对象,只要保留这个结构即可。
我已经通过两个foreach循环完成了这个任务,但我希望有更加优雅的方法。
我还使用了这个类来保存SQL结果表:
public class Example
{
public int Id { get; set; }
public string Name { get; set; }
public Guid ApplicationUserId { get; set; }
public int? JobTypeId { get; set; }
}
C#中的Group by常用于按照某些属性将对象分组。在给定的例子中,我们有一个名为Example的类,包含了Id、Name、ApplicationUserId和JobTypeId等属性。我们还有一个名为GroupedResults的类,包含了Id、Name和Therapists等属性。最后,我们还有一个名为Result的类,包含了Id和JobTypeId等属性。
在给定的代码中,我们使用了Group by命令,按照Id和Name属性对dbResult进行分组。然后,我们通过Select方法将结果映射到GroupedResults对象中,同时将Therapists属性映射到Result对象中。最终,我们可以使用序列化器将这些对象转换为JSON格式,以获取所需的数据结构。
这个问题的出现原因是需要对一组对象按照某些共同属性进行分组,以便于后续处理和使用。解决方法是使用C#的Group by命令和Select方法,通过Lambda表达式指定分组的属性,并将结果映射到新的对象中。
以下是完整的代码示例:
public class Example { public int Id { get; set; } public string Name { get; set;} public Guid ApplicationUserId { get; set; } public int? JobTypeId { get; set; } } public class GroupedResults { public int Id { get; set; } public string Name { get; set; } public IEnumerableTherapists { get; set; } } public class Result { public Guid Id { get; set; } public int? JobTypeId { get; set; } } var results = dbResult.GroupBy(c => new { c.Id, c.Name }).Select(entry => new GroupedResults { Id = entry.Key.Id, Name = entry.Key.Name, Therapists = entry.Select(x => new Result { Id = x.ApplicationUserId, JobTypeId = x.JobTypeId }) });
以上就是使用C#的Group by命令按照共同属性对对象进行分组的方法,最终通过序列化器将结果转换为JSON格式的数据结构。