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