在单个对象中对数据进行排序,而不是IEnumerable

时间:2017-11-07 21:33:49

标签: c# asp.net linq sorting ienumerable

我有一个对象。对象中的一个字段是统计信息列表。我正试图按统计数据中的一个字段排序。所以我有一个服务器,服务器有一个名字,工人计数和工人统计...工人统计有一个多个统计数据列表,如DA,服务器,客户端...我想按客户订购那些工人统计数据但仍然离开整个对象作为一个服务器。我试着这样做。

SvcProxy.Server refreshedServer = SvcProxy.GetServer(serverName); var tempServer = refreshedServer.WorkerStats.OrderBy(ws => ws.Client);

但是当我这样做时,tempServer变成了Ordered IEnumerable。当我想将它保留为SvcProxy.Server,除了客户端订购的统计信息。这可能吗?

有敏感的数据,如果我可以合法地遇到麻烦,我会发布关于课程的内容。 WorkerStats是一个IEnumerable。

public IEnumerable<WorkerStatsDisplay> WorkerStats 
{
    get {
        if (String.IsNullOrEmpty(ServerName) || !Active)
        {
            return Enumerable.Empty<WorkerStatsDisplay>();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用扩展方法:

public static class ServerExtensions
{
    public static IEnumerable<WorkerStatsDisplay> GetSortedWorkerStats(this Server server)
    {
        return server.WorkerStats.OrderBy(ws => ws.Client);
    }
}

然后像这样使用它:

SvcProxy.Server refreshedServer = SvcProxy.GetServer(serverName);
var ordered = refreshedServer.GetSortedWorkerStats();

确保将此人包装在与原始类相同的命名空间中。您不必这样做,但它是SOP,并且随着您使用类导入扩展方法(因为它将存在于同一名称空间中),它使得它变得更容易。

虽然它与您现在所做的相同,但它使其可重复使用,并且无需修改原始类即可供所有人使用。

我很快就把它鞭打了。请检查代码的一致性。

祝你好运!