C# 需要每个子记录的消息大小
我有一个下面的C# 需要每个子记录的消息大小,c#,linq,C#,Linq,我有一个下面的LINQ查询,我想从Master数据中选择fillchild数据,另外我还想计算大小 this.Size = JsonConvert.SerializeObject(Child).Length; 这是查询和基础数据 var mast = new List<Master> { new Master{Id=1, Name="Name1"}, new Master{Id=2, Name="Name1"}, new Master{Id=3, Name=
LINQ
查询,我想从Master
数据中选择fillchild
数据,另外我还想计算大小
this.Size = JsonConvert.SerializeObject(Child).Length;
这是查询和基础数据
var mast = new List<Master>
{
new Master{Id=1, Name="Name1"},
new Master{Id=2, Name="Name1"},
new Master{Id=3, Name="Name11"},
new Master{Id=4, Name="Name11"},
};
var g = from data in mast
group data by new { data.Name } into T
select new Message(T.Select(t => new Child
{
Name = t.Name
}).ToList());
当前列表和单个项目之间出现以下铸态问题时出错
select new Message(T.Select(t => new Child
{
Name = t.Name
}).ToList());
无法从“System.Collections.Generic.List”转换为“TestApp.Child”TestApp 这里需要做什么?谢谢 编辑:我试图实现的最终结果是一个
列表
,其中内部的列表
按名称分组;因此,根据我的示例数据,将有两个消息的列表,每个列表包含两个项目:
- 清单1:
- 信息:姓名:姓名1,尺码16
- 信息:姓名:姓名1,尺码16
- 清单2:
- 信息:姓名:姓名11,尺码17
- 信息:姓名:姓名11,尺码17
您缺少对FirstOrDefault
的调用,该调用传递了从T返回的IEnumerable
。选择调用消息
构造函数
您的ToList
调用也位于错误的位置-您只是将IEnumerable
转换为List
,而实际上,在创建每条消息之后,您需要一个列表
改为:
var g = (from data in mast
group data by new { data.Name } into T
select new Message(T.Select(t => new Child
{
Name = t.Name
}).FirstOrDefault())).ToList();
编辑:我认为您关心的是FirstOrDefault
调用只返回1个值-但是,请记住,每个名称对应1个Child
,因为您只是按名称对它们进行分组-这正是您想要的。最终的列表
根据需要包含具有大小的唯一名称
编辑2.0:好的,根据您自己的答案,这澄清了您的问题,我认为此查询将更好地满足您的需要:
var messages = mast.GroupBy(m => m.Name)
.Select(nameGroup => Enumerable.Repeat(
new Message(new Child() { Name = nameGroup.Key }), nameGroup.Count()).ToList()
).ToList();
上述操作将生成一个按名称分组的列表
(但保留原始邮件计数),并且每个消息都将计算Size
属性。至少显示错误输出。无法从“System.Collections.Generic.List”转换为“TestApp.Child”TestApp您正在将列表
传递给消息
构造函数。。。您的ToList
呼叫没有意义,请注意两件事1。构造函数需要单个元素,而您正在传递列表。2.如果您确定它将始终是1个子项,那么您可以选择FirstOrDefault(),而不是仅为了安全而选择。不,我可以传递所有元素,但如何计算每个元素的大小?FirstOrDefault
始终只给我1条记录是的,但通过按名称分组,您当时只能有1条记录!我刚刚运行了这个解决方案(我的父母关机了,一开始是通过我的电话接听的,糟糕的主意,哈哈)——我收到了一个包含2条消息的列表;第一个是“名称1”,尺寸16,第二个是“名称11”,尺寸17。谢谢,但我希望所有4条记录都回来,每组2条,还希望计算尺寸消息构造函数帮助我计算尺寸,请检查我的答案,并让我知道是否有任何改进。谢谢非常感谢
var messages = mast.GroupBy(m => m.Name)
.Select(nameGroup => Enumerable.Repeat(
new Message(new Child() { Name = nameGroup.Key }), nameGroup.Count()).ToList()
).ToList();