c#linq最后一次按空排序

c#linq最后一次按空排序,c#,linq,sorting,C#,Linq,Sorting,我有一个日志列表作为字符串。它是这样输出给我的: "2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result", "2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success"

我有一个日志列表作为字符串。它是这样输出给我的:

"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started"
public class TroposLog
{
    public DateTime Created { get; set; }
    public string UserName { get; set; }
    public string SessionId { get; set; }
    public string ActionName { get; set; }
    public string Message { get; set; }
}
这是在错误的顺序。 应按以下顺序进行:

"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",,
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started"
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session"
"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
看来旧系统只是按日期排序。 我已经创建了一个模型并提取了我需要的零件。 模型如下所示:

"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started"
public class TroposLog
{
    public DateTime Created { get; set; }
    public string UserName { get; set; }
    public string SessionId { get; set; }
    public string ActionName { get; set; }
    public string Message { get; set; }
}
现在,这给了我一些工作。 但是我不能按照我想要的方式来订购。 如果我这样做:

return troposLogs
           .OrderBy(m => m.UserName)
           .ThenBy(m => m.SessionId)
           .ThenBy(m => m.Created);
它返回以下命令:

"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",,
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started"
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session"
"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
我也尝试过:

return troposLogs.OrderBy(m => m.UserName != null).ThenBy(m => m.UserName);
返回此订单:

"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",,
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started"
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session"
"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
"2018.07.26 10:35:06:7889: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:06:7959: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Requested (SOCS)... Success",
"2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success",
"2018.07.26 10:35:06:9229: 4d50b064-d269-4256-a187-82a3f9402735 - Client successfully got the transaction result",
"2018.07.26 10:35:07:1229: c0c2311a-b509-4e6e-a236-80e2d86f2647 - Client Successfully Retrieved Session",
"2018.07.26 10:35:07:1429: 4d50b064-d269-4256-a187-82a3f9402735 - End Session Requested - Thread started",
"2018.07.26 10:35:06:9019: DAIW - New Session Requested... Success (Start Session Thread Started)",
"2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
在这种情况下,日期已经接管。但我需要会话id才能在一起

有人能帮我吗

这是一个tropos日志的示例(我忽略了数据类型,只是向您展示它如何与字符串日志关联)

上面的日志没有
用户名
操作名

var logString = "2018.07.26 10:35:07:1219: DAIW - Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)";
var log = new TroposLog();
log.Created = "2018.07.26 10:35:07:1219";
log.SessionId = "4d50b064-d269-4256-a187-82a3f9402735";
log.Message = "Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)";
log.UserName= "DAIW";
这个没有
ActionName
。最后:

var logString = "2018.07.26 10:35:06:9169: 4d50b064-d269-4256-a187-82a3f9402735 - Run Transaction Thread (SOCS)... Success";
var log = new TroposLog();
log.Created = "2018.07.26 10:35:06:9169";
log.SessionId = "4d50b064-d269-4256-a187-82a3f9402735";
log.Message = "Run Transaction Thread (SOCS)... Success";
log.ActionName= "SOCS";
这个没有
用户名
。 我希望这有助于澄清

尝试:

troposLogs.OrderBy(m => m.UserName == null).ThenBy(m => m.UserName)
所以
UserName==null
true
UserName!=null
false
,而
bool
值的顺序为
false,true

您的错误是,您先按
用户名
订购,然后按
用户名
订购“为空”。。。但是第二次排序是无用的(因为按用户名排序已经将
null
notnull
分开)。你必须做相反的事(就像我做的那样)

测试:

var-troposLogs=new List();
var log=新的对流层轨道();
log.Created=DateTime.ParseExact(“2018.07.26 10:35:06:7889”,“yyyy\.MM\.dd HH\:MM\:ss\:ffff”,CultureInfo.InvariantCulture);
log.SessionId=“4d50b064-d269-4256-a187-82a3f9402735”;
log.Message=“客户机成功获取交易结果”;
对流层障碍。添加(日志);
log=新的对流层轨道();
log.Created=DateTime.ParseExact(“2018.07.26 10:35:07:1219”,“yyyy\.MM\.dd HH\:MM\:ss\:ffff”,CultureInfo.InvariantCulture);
log.SessionId=“4d50b064-d269-4256-a187-82a3f9402735”;
log.Message=“启动会话线程成功(c0c2311a-b509-4e6e-a236-80e2d86f2647)”;
log.UserName=“DAIW”;
对流层障碍。添加(日志);
log=新的对流层轨道();
log.Created=DateTime.ParseExact(“2018.07.26 10:35:06:9169”,“yyyy\.MM\.dd HH\:MM\:ss\:ffff”,CultureInfo.InvariantCulture);
log.SessionId=“4d50b064-d269-4256-a187-82a3f9402735”;
log.Message=“运行事务线程(SOCS)…成功”;
log.ActionName=“SOCS”;
对流层障碍。添加(日志);
var ordered=troposLogs.OrderBy(m=>m.UserName==null)
.ThenBy(m=>m.UserName)
.ThenBy(m=>m.SessionId)
.ThenBy(m=>m.Created)
.ToArray();
试试:

所以
UserName==null
true
UserName!=null
false
,而
bool
值的顺序为
false,true

您的错误是,您先按
用户名
订购,然后按
用户名
订购“为空”。。。但是第二次排序是无用的(因为按用户名排序已经将
null
notnull
分开)。你必须做相反的事(就像我做的那样)

测试:

var-troposLogs=new List();
var log=新的对流层轨道();
log.Created=DateTime.ParseExact(“2018.07.26 10:35:06:7889”,“yyyy\.MM\.dd HH\:MM\:ss\:ffff”,CultureInfo.InvariantCulture);
log.SessionId=“4d50b064-d269-4256-a187-82a3f9402735”;
log.Message=“客户机成功获取交易结果”;
对流层障碍。添加(日志);
log=新的对流层轨道();
log.Created=DateTime.ParseExact(“2018.07.26 10:35:07:1219”,“yyyy\.MM\.dd HH\:MM\:ss\:ffff”,CultureInfo.InvariantCulture);
log.SessionId=“4d50b064-d269-4256-a187-82a3f9402735”;
log.Message=“启动会话线程成功(c0c2311a-b509-4e6e-a236-80e2d86f2647)”;
log.UserName=“DAIW”;
对流层障碍。添加(日志);
log=新的对流层轨道();
log.Created=DateTime.ParseExact(“2018.07.26 10:35:06:9169”,“yyyy\.MM\.dd HH\:MM\:ss\:ffff”,CultureInfo.InvariantCulture);
log.SessionId=“4d50b064-d269-4256-a187-82a3f9402735”;
log.Message=“运行事务线程(SOCS)…成功”;
log.ActionName=“SOCS”;
对流层障碍。添加(日志);
var ordered=troposLogs.OrderBy(m=>m.UserName==null)
.ThenBy(m=>m.UserName)
.ThenBy(m=>m.SessionId)
.ThenBy(m=>m.Created)
.ToArray();

您真正想要的是按SessionId对日志进行分组,然后按日期(我想)对每组进行排序,这样您就可以尝试以下方法:

        var troposLogs = new TroposLog[]
        {
            new TroposLog
            {
                Created = DateTime.Now, 
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = null,
                Message = "Client successfully got the transaction result"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = "SOCS",
                Message = "Run Transaction Requested (SOCS)... Success"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = "DAIW",
                SessionId = "c0c2311a-b509-4e6e-a236-80e2d86f2647",
                ActionName = null,
                Message = "New Session Requested... Success (Start Session Thread Started)"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = "SOCS",
                Message = "Run Transaction Thread (SOCS)... Success"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = null,
                Message = "Client successfully got the transaction result"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = "DAIW",
                SessionId = "c0c2311a-b509-4e6e-a236-80e2d86f2647",
                ActionName = null,
                Message = "Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "c0c2311a-b509-4e6e-a236-80e2d86f2647",
                ActionName = null,
                Message = "Client Successfully Retrieved Session"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = "",
                Message = "End Session Requested - Thread started"
            },
        };

        var orderedLogs = troposLogs.OrderBy(l => l.Created) // Just in case
                                    .GroupBy(l => l.SessionId)
                                    .OrderBy(g => g.FirstOrDefault().Created)
                                    .SelectMany(g => g)
                                    .ToList();
注意:要使此功能正常工作,您需要在填充模型时为所有日志条目分配正确的sessionId,例如,“DAIW”用户的所有日志都应具有sessionId“c0c2311a-b509-4e6e-a236-80e2d86f2647”,这是根据您的输入数据确定的正确sessionId(这应该不是什么大问题)


希望这对您有所帮助

您真正想要的是按SessionId对日志进行分组,然后按日期(我想)对每组进行排序,这样您就可以尝试:

        var troposLogs = new TroposLog[]
        {
            new TroposLog
            {
                Created = DateTime.Now, 
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = null,
                Message = "Client successfully got the transaction result"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = "SOCS",
                Message = "Run Transaction Requested (SOCS)... Success"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = "DAIW",
                SessionId = "c0c2311a-b509-4e6e-a236-80e2d86f2647",
                ActionName = null,
                Message = "New Session Requested... Success (Start Session Thread Started)"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = "SOCS",
                Message = "Run Transaction Thread (SOCS)... Success"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = null,
                Message = "Client successfully got the transaction result"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = "DAIW",
                SessionId = "c0c2311a-b509-4e6e-a236-80e2d86f2647",
                ActionName = null,
                Message = "Start Session ThreadSuccess (c0c2311a-b509-4e6e-a236-80e2d86f2647)"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "c0c2311a-b509-4e6e-a236-80e2d86f2647",
                ActionName = null,
                Message = "Client Successfully Retrieved Session"
            },
            new TroposLog
            {
                Created = DateTime.Now,
                UserName = null,
                SessionId = "4d50b064-d269-4256-a187-82a3f9402735",
                ActionName = "",
                Message = "End Session Requested - Thread started"
            },
        };

        var orderedLogs = troposLogs.OrderBy(l => l.Created) // Just in case
                                    .GroupBy(l => l.SessionId)
                                    .OrderBy(g => g.FirstOrDefault().Created)
                                    .SelectMany(g => g)
                                    .ToList();
注意:要使此功能正常工作,您需要在填充模型时为所有日志条目分配正确的sessionId,例如,“DAIW”用户的所有日志都应具有sessionId“c0c2311a-b509-4e6e-a236-80e2d86f2647”,这是根据您的输入数据确定的正确sessionId(这应该不是什么大问题)


希望这对您有所帮助

我看不出日志消息是如何反映在您的数据结构中的。我看到一个日期,后跟某种标识符,然后是一条消息。但是
ActionName
UserName
SessionID
有什么关系?我看不出日志消息如何反映在您的数据结构中。我看到一个日期,后跟某种标识符,然后是一条消息。但是
ActionName
UserName
SessionID
有什么关系呢?我也试过了,但它仍然没有给出正确的顺序。我已经更新了上面的问题,以显示result@r3plica更新的答案我也试过了,但还是没有给出正确的顺序。我已经更新了我的q