Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要每个子记录的消息大小_C#_Linq - Fatal编程技术网

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
数据中选择fill
child
数据,另外我还想计算大小

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();