使用 C# 在 Linq 中展平对象
Flatten Object in Linq using c#
我有一个从 json 响应反序列化的数据对象,其属性格式如下:
[0] ....
组名:"Group 1"
成员列表:[UserID 的字符串数组]
[1]
组名:"Group 2"
成员列表:[UserID 的字符串数组]
。
。等等
我想将其展平,以便它只是 returns 2 列,例如:
用户ID,姓名
1 人,第 1 组
2,第 1 组
3,第 1 组
4,第 2 组
5,第 2 组
等等。
用户 ID 在所有组中都是唯一的,即用户只是 1 个组的成员
我试过:
var group = JsonConvert.DeserializeObject(<My Json File>);
var gpObject = JsonConvert.DeserializeObject<GroupDetailResponse>(group.ToString());
var memberGroup = gpObject.Data.Select(y => new { UserId = y.Memberlist.SelectMany(sl => y.memberlist).ToArray(), GroupName = y.Id }).ToArray();
但这 return 不是我上面所期望的。
任何帮助将不胜感激 - 谢谢。
JSON 片段:
"data": [
{
"id": "ZZ1",
"name": "Group1",
"memberList": [
"User1",
"User2",
"User3"
]
},
{
"id": "ZZ2",
"name": "Group2",
"memberList": [
"User4",
"User5"
],
}
]
以及 DTO:
public class GroupDetailResponse
{
[JsonProperty("data")]
public GroupInformation[] Data { get; set; }
}
public class GroupInformation
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("memberList")]
public string[] MemberList { get; set; }
}
}
这应该适合你:
var memberGroup1 = gpObject.SelectMany(x => x.Memberlist, (group, id) => new { id, group.GroupName});
如果您将结果选择器函数传递给您的 SelectMany 调用,您可以使用它将 "parent (GroupName in this case) with the "child" 值(在本例中为用户 ID)合并在一起。
这篇博客很好地解释了 SelectMany 的用法来展平对象,包括使用结果选择器:http://blogs.interknowlogy.com/2008/10/10/use-linqs-selectmany-method-to-flatten-collections/
我有一个从 json 响应反序列化的数据对象,其属性格式如下:
[0] ....
组名:"Group 1"
成员列表:[UserID 的字符串数组]
[1]
组名:"Group 2"
成员列表:[UserID 的字符串数组]
。
。等等
我想将其展平,以便它只是 returns 2 列,例如:
用户ID,姓名
1 人,第 1 组
2,第 1 组
3,第 1 组
4,第 2 组
5,第 2 组
等等。
用户 ID 在所有组中都是唯一的,即用户只是 1 个组的成员
我试过:
var group = JsonConvert.DeserializeObject(<My Json File>);
var gpObject = JsonConvert.DeserializeObject<GroupDetailResponse>(group.ToString());
var memberGroup = gpObject.Data.Select(y => new { UserId = y.Memberlist.SelectMany(sl => y.memberlist).ToArray(), GroupName = y.Id }).ToArray();
但这 return 不是我上面所期望的。
任何帮助将不胜感激 - 谢谢。
JSON 片段:
"data": [
{
"id": "ZZ1",
"name": "Group1",
"memberList": [
"User1",
"User2",
"User3"
]
},
{
"id": "ZZ2",
"name": "Group2",
"memberList": [
"User4",
"User5"
],
}
]
以及 DTO:
public class GroupDetailResponse
{
[JsonProperty("data")]
public GroupInformation[] Data { get; set; }
}
public class GroupInformation
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("memberList")]
public string[] MemberList { get; set; }
}
}
这应该适合你:
var memberGroup1 = gpObject.SelectMany(x => x.Memberlist, (group, id) => new { id, group.GroupName});
如果您将结果选择器函数传递给您的 SelectMany 调用,您可以使用它将 "parent (GroupName in this case) with the "child" 值(在本例中为用户 ID)合并在一起。
这篇博客很好地解释了 SelectMany 的用法来展平对象,包括使用结果选择器:http://blogs.interknowlogy.com/2008/10/10/use-linqs-selectmany-method-to-flatten-collections/