我不确定我找到的解决这个问题的方法是不是一个好方法。
示例场景:
类folderItem
{
public int id_get;set;
公共字符串名称get;set;
public fileitem[]文件获取;设置;
}
类文件项
{
public int id_get;set;
public int folderid_get;set;
公共字符串名称get;set;
公共字节[]内容获取;设置;
}
从2个集合开始:
文件夹=
新文件夹项目[]
{
新文件夹项目
{
ID=1,
name=“folder1”
},请
新文件夹项目
{
ID=2,
name=“folder2”
}
}(二)
文件项[]文件=
新建文件项[]
{
新建文件项
{
ID=100,
folderID=1,
name=“file1.txt”,
内容=新字节[]1、2、3
},请
新建文件项
{
ID=200,
folderID=1,
name=“file2.txt”,
内容=新字节[]1、2、3
},请
新建文件项
{
ID=300,
folderID=2,
name=“file3.txt”,
内容=新字节[]1、2、3
},请
新建文件项
{
ID=400,
folderID=2,
name=“file4.txt”,
内容=新字节[]1、2、3
}
}(二)
为了将“fileitem”放入“folder”的属性“files”,我需要:
文件
.加入
(
文件夹,
x=>x.folderid,文件夹ID,
x=>x.标识,
(x,y)=>新建文件=x,文件夹=y
)
.groupby(x=>x.folder.id)
.选择
(x=>
{
var folder=x.first().folder;
folder.files=x.select(z=>z.file).toarray();
返回文件夹;
}
)
我可以在groupbylambda中使用first()because I'm grouping by its id
我得到:
有没有比这更快更好的扩展方法?有什么最佳实践吗?
从2个集合开始:
FolderItem[] folders =
new FolderItem[]
{
new FolderItem
{
Id = 1,
Name = "Folder1"
},
new FolderItem
{
Id = 2,
Name = "Folder2"
}
};
FileItem[] files =
new FileItem[]
{
new FileItem
{
Id = 100,
FolderId = 1,
Name = "file1.txt",
Content = new byte[] { 1, 2, 3 }
},
new FileItem
{
Id = 200,
FolderId = 1,
Name = "file2.txt",
Content = new byte[] { 1, 2, 3 }
},
new FileItem
{
Id = 300,
FolderId = 2,
Name = "file3.txt",
Content = new byte[] { 1, 2, 3 }
},
new FileItem
{
Id = 400,
FolderId = 2,
Name = "file4.txt",
Content = new byte[] { 1, 2, 3 }
}
};
为了将“fileitem”放入“folder”的“files”属性中,我需要:
files
.Join
(
folders,
x => x.FolderId,
x => x.Id,
(x,y) => new { File = x, Folder = y }
)
.GroupBy(x => x.Folder.Id)
.Select
(x =>
{
var folder = x.First().Folder;
folder.Files = x.Select(z => z.File).ToArray();
return folder;
}
)
我可以用.First()
在GroupBy
lambda,因为我按其ID分组
我得到:
有没有比这更快更好的扩展方法?有什么最佳实践吗?