0

我正在设置一个控制台应用程序来循环浏览网络中的服务器并收集它们最近的备份日期。我有服务器连接的循环并填充了所有备份日期的列表。我现在尝试按 CreationTime 对备份文件进行排序,选择最新的文件,然后将其添加到新列表中。

在这里,我有一个查询,按 creationTime 排序我想要的文件,按服务器分组,然后按 Max CreationTime 分组,并通过 slimQuery 选择这些项目。

List<Inputs> slimList = new List<Inputs>();

var orderByDescendingResult = from items in initialList
                              where items.FileName == "*GuestHelper*"
                              orderby items.CreationTime descending
                              select items;

var srvGroup = initialList.GroupBy(a => (a.ServerName.ToString()));

var maxDategroup = initialList.GroupBy(b => (b.CreationTime.Max()));

var slimQuery = from items in orderByDescendingResult
                group srvGroup by maxDategroup into listItems
                select listItems;

var initialName = from PropertyData p in slimQuery
                  where p.Name == "FileName"
                  select p.Value;

var initialDate = from PropertyData p in slimQuery
                  where p.Name == "CreationDate"
                  select p.Value;

var initialSize = from PropertyData p in slimQuery
                  where p.Name == "FileSize"
                  select p.Value;

var initialSrvr = from PropertyData p in slimQuery
                  where p.Name == "ServerName"
                  select p.Value;

var fileInfo = new Inputs
{
    ServerName = initialSrvr.ToString(),
    FileName = initialName.ToString(),
    CreationTime = initialDate.ToString()
};

slimList.Add(fileInfo);

我的查询返回 null 因此没有任何内容添加到我的新列表中。那么他们为什么返回 null,我能做些什么来改变结果呢?

查询和列表结果图片

4

1 回答 1

0

您的所有结果都是类型IEnumerable或等效的。

所以 ,initialNameinitialDateinitialSrvr对象的集合。此集合可以包含 0、1 或多个项目。

如果要选择单个元素的值,可以使用以下方法:

var fileInfo = new Inputs
{
     ServerName = initialSrvr.FirstOrDefault(),
     FileName = initialName.FirstOrDefault(),
     CreationTime = initialDate.FirstOrDefault(),
};

注意:有多种方法可以获得你想要的值;看看linq

于 2019-07-27T17:06:51.553 回答