c# - 我怎样才能旋转这个对象列表?

标签 c# linq

我有一个 channel 列表

var blocks = new List<Block>();
foreach (var channel in ChannelsCollection)
{
    var ch = channel.ChannelCollectionItems.Select(item => new Channel
    {
        Id = channel.Id, 
        Delay = item.Delay,
        Trigger = item.Trigger,
        Restore = item.Restore,
    }).ToList();

    blocks.Add(new Block { Id = index++ , Channels = ch});
}

这会产生一个 block 列表,每个 block 都包含一个 channel 列表。

例如

Block1          Block2          Block3          Block4
    Channel1        Channel1        Channel1        Channel1
        Val1            Val1            Val1            Val1
        Val2            Val2            Val2            Val2
        Val3            Val3            Val3            Val3
    Channel2        Channel2        Channel2        Channel2
        Val1            Val1            Val1            Val1
        Val2            Val2            Val2            Val2
        Val3            Val3            Val3            Val3
    Channel3        Channel3        Channel3        Channel3
        Val1            Val1            Val1            Val1
        Val2            Val2            Val2            Val2
        Val3            Val3            Val3            Val3

我需要旋转此列表,以便获得包含该 channel 的每个 block channel 列表。

例如

Channel1    
    Block1        Block2        Block3        
        Val1            Val1            Val1  
        Val2            Val2            Val2  
        Val3            Val3            Val3  

Channel2
    Block1        Block2        Block3        
        Val1            Val1            Val1  
        Val2            Val2            Val2  
        Val3            Val3            Val3            

Channel3
    Block1        Block2        Block3        
        Val1            Val1            Val1  
        Val2            Val2            Val2  
        Val3            Val3            Val3        

有没有一种快速的方法(例如使用 LINQ)来做到这一点?

编辑

ChannelBlock 定义为:

public class Channel
{
    public int? Id { get; set; }
    public string Delay { get; set; }
    public string Trigger { get; set; }
    public string Restore { get; set; }
}

public class Block
{
    public int Id { get; set; }
    public List<Channel> Channels { get; set; }
}

最佳答案

尝试类似的事情

var channels = blocks
    .SelectMany(b => b.Channels.Select(c => new { b, c }))
    .GroupBy(p => p.c.Id)
    .Select(g => new { Channel = g.First().c, Blocks = g.Select(p => p.b) });

正如其他人所指出的,您的 Channel类没有任何地方可以存储 Block 的序列s,因此这将返回一系列带有 Channel 的匿名对象。叫Channel和一个IEnumerable<Block>Blocks .

请注意,它还比较 ChannelId 提供,因为它们在其他方面似乎没有可比性。如果您Channel Block 之间不一致s,这只需 Channel从第一个Block .

关于c# - 我怎样才能旋转这个对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808037/

相关文章:

c# - 如何处理数字文件c#

c# - 如何在单个 SQL 连接中运行多个 SQL 命令?

sql - 在 Linq 查询中将 join 与 String.Contains 结合使用

.net - Linq to SQL-不获取特定列

c# - 加快 linq/实体结果的返回速度

c# - 如何在两列上生成 RDLC 报告?

c# - 枚举类型作为跨 Web 服务的常量?

c# - 为什么 Invoke via Delegate 不内置到 .NET 中

c# - Linq 直方图

c# - 根据键名选择枚举值