C# - 按公共属性对对象进行分组

15 浏览
0 Comments

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(query).ToList();

如何从这个结果表格中提取共同的值并返回一个对象,对象的结构如下:

[

{

"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; }

}

0
0 Comments

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 IEnumerable Therapists { 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格式的数据结构。

0