DataTable
可能具有以下结构和数据。
Folder User P1 P2 P3
------------------------
FolderOne UserA 1 0 1
FolderOne UserA 0 0 0
FolderOne UserA 1 0 0
FolderOne UserB 1 1 1
FolderOne UserB 0 1 1
FolderOne UserC 0 0 0
------------------------
Result
FolderOne UserA 1 0 1
FolderOne UserB 1 1 1
我想将上表作为结果表。我应该采取什么措施来获得理想的结果。 ?
OR
我可以在这里使用LINQ吗?请注意,P1,P2和P3为typeof(bool)
结果表后面的逻辑是group by
用户名,并对P1行,P2行,P3行使用OR
操作。并且只有一个FolderName
。
答案 0 :(得分:3)
根据你的描述很难知道你真正需要什么,但我会猜测。我的第一个想法是删除DataTable
方面,这样我们就可以处理一系列强类型对象而不会DataTable
阻碍...我们可以这样做:
var tableData = dataTable.AsEnumerable()
.Select(row => new {
Folder = row.Field<string>("Folder"),
User = row.Field<string>("User"),
P1 = row.Field<bool>("P1"),
P2 = row.Field<bool>("P2"),
P3 = row.Field<bool>("P3")
});
然后,在按文件夹和用户分组后,猜测你想要“或”结果,你可以使用:
var result = tableData.GroupBy(row => new { row.Folder, row.User })
.Select(g => new {
Folder = g.Key.Folder,
User = g.Key.Folder,
P1 = g.Any(row => row.P1),
P2 = g.Any(row => row.P2),
P3 = g.Any(row => row.P3)
});
这样做可能会有一些更有效的方法,但我希望这是非常合理的 - 如果你想要更高的效率,你应该尝试将逻辑移动到任何数据库查询产生表格。