我有一个 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)来做到这一点?
编辑
Channel
和 Block
定义为:
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
.
请注意,它还比较 Channel
由 Id
提供,因为它们在其他方面似乎没有可比性。如果您Channel
Block
之间不一致s,这只需 Channel
从第一个Block
.
关于c# - 我怎样才能旋转这个对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808037/