C#LINQ仅在父级分层父子关系数据中的父级
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#LINQ仅在父级分层父子关系数据中的父级,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2094字,纯文字阅读大概需要3分钟。
内容图文
![C#LINQ仅在父级分层父子关系数据中的父级](/upload/InfoBanner/zyjiaocheng/796/9548f4fd69f040e2af97444c8061c31f.jpg)
我在LINQ中遇到了一个有趣的问题,我不知道如何解决它.这是我的数据的样子
我有一个Send对象列表(List< Send>),其中Send对象具有以下属性
public class Send
{
public string messageName { get; set; }
public string Port { get; set; }
public string Type { get; set; }
}
其中Port可以是PortA,PortB等.类型只能是“接收”或“传输”,而messageName可以是
0_firstmessage
1_secondmessage
2_thirdmessage
messageName always have an identifier at the start 0,1,2….N.
我当前的列表包含如下数据.数据中需要注意的几点
>我的数据已根据Ports排序.所以,PortA数据来了
首先是PortB.
>每个“接收”类型的消息后跟0或N个发送消息组.
>每个传输消息始终具有父接收.
我的数据:
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
我希望ORDERBY基于MESSAGE_NAME仅收到“接收”类型的消息.孩子“传输”消息应该保持不变.
我在线搜索了很多,但我不知道如何编写这个LINQ查询.
这是一个例子:你可以在这里玩.
https://dotnetfiddle.net/DKOOk2
解决方法:
我有一个解决方案,假设您先收到接收后跟传输类型的消息.
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仅在父级分层父子关系数据中的父级全部内容,希望文章能够帮你解决C#LINQ仅在父级分层父子关系数据中的父级所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。