gpt4 book ai didi

C# LINQ Orderby on parent only in hierarchical parent-child relationship data

转载 作者:太空狗 更新时间:2023-10-30 01:16:10 24 4
gpt4 key购买 nike

我在 LINQ 中遇到了一个有趣的问题,但我不确定如何解决它。这是我的数据的样子

我有一个发送对象列表(List<Send>),其中发送对象具有以下属性

public class Send
{
public string messageName { get; set; }
public string Port { get; set; }
public string Type { get; set; }
}

端口可以是PortA, PortB等类型只能是"receive""transmit" messageName 可以是

0_firstmessage
1_secondmessage
2_thirdmessage

messageName always have an identifier at the start 0,1,2....N.

我当前的列表包含如下数据。数据中需要注意的几点

  1. 我的数据已经根据端口进行了排序。所以,PortA数据来了首先是 PortB。
  2. 每条“接收”类型的消息后跟 0 或 N 个传输消息组。
  3. 每个传输消息总是有父级接收。

我的数据:

MESSAGENAME, PORT  , TYPE  
- 0_message , PortA , receive
- 1_message , PortA , transmit
- 3_message , PortA , transmit
- 7_message , PortA , transmit
- 8_message , PortA , receive
- 9_message , PortA , transmit

- 2_message , PortB , receive
- 4_message , PortB , receive
- 5_message , PortB , transmit
- 6_message , PortB , transmit
- 10_message, PortB , receive
- 11_message , PortB , transmit

我的最终输出应该是这样的。

 MESSAGENAME, PORT  , TYPE  
- 0_message , PortA , receive
- 1_message , PortA , transmit
- 3_message , PortA , transmit
- 7_message , PortA , transmit
- 2_message , PortB , receive
- 4_message , PortB , receive
- 5_message , PortB , transmit
- 6_message , PortB , transmit
- 8_message , PortA , receive
- 9_message , PortA , transmit
- 10_message, PortB , receive
- 11_message , PortB , transmit

我只想基于 MESSAGE_NAME 对“接收”类型的消息进行 ORDERBY。子“传输”消息应保持完整。

我在网上搜索了很多,但我不确定如何编写这个 LINQ 查询。

这是一个例子:你可以在这里玩。 https://dotnetfiddle.net/DKOOk2

最佳答案

我有一个解决方案,假设您首先收到 receive,然后是 transmit 类型的消息。

int gid=0;
var results = messages.Select(m => new
{ // Rank each message
m.Type.Equals("Receive", StringComparison.InvariantCultureIgnoreCase ) ? ++gid: gid,
message=m
})
.GroupBy(g=>g.groupid) // Group them on Rank
.OrderBy(g=>int.Parse(g.First().message.messageName.Split('_')[0])) // apply Sort
.SelectMany(c=>c.Select(x=>x.message)) // flatten structure .
.ToList() ;

检查工作 example

关于C# LINQ Orderby on parent only in hierarchical parent-child relationship data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36197286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com