我可以同时使用清单上的First()和Concat()

时间:2019-01-08 07:32:49

标签: c# linq

我有一个列表,我想从中删除null,然后将其与其他列表连接起来。

我可以使用LINQ吗?例如

ViewBag.BackUPDestinationList = ServiceBackupList.Select(x =>
new SelectListItem()
{
Value = x.ServerInstanceId.ToString(),
Text = x.SPPServerName,
Group = group1
}).Concat(ServiceBackupList.Select(x =>
new SelectListItem()
{
Value = x.NodeGuid.ToString(),
Text = x.SPServerName,
Group = group2
})).ToList();
上面的

我正在使用两个selectlstitems并将它们串联起来,但是我想检查我的Text是否x.SPPServerName或x.SPServerName为空或不包含它们。  如果我使用First(),也会在使用Concate()时出错。

3 个答案:

答案 0 :(得分:4)

您可以在创建SelectListItem之前过滤两个集合。考虑以下示例,

ServiceBackupList.Where(x=>!string.IsNullOrEmpty(x.SPPServer))
                .Select(x =>
                     new SelectListItem()
                     {
                       Value = x.ServerInstanceId.ToString(),
                       Text = x.SPPServerName,
                       Group = group1
                     })
                .Concat(ServiceBackupList
                .Where(x=>!string.IsNullOrEmpty(x.SPPServer))
                .Select(x =>
                     new SelectListItem()
                     {
                       Value = x.NodeGuid.ToString(),
                       Text = x.SPServerName,
                       Group = group2
                     })).ToList();

答案 1 :(得分:2)

您可以先使用Where删除它们,然后填充SelectListItem集合:

ServiceBackupList = ServiceBackupList
                      .Where(x => !String.IsNullOrEmpty(x.SPPServerName))
                      .ToList();
......  // code to populate in ViewBag
......

之后,您可以生成SelectListItem的集合。

答案 2 :(得分:0)

您可以先使用Where过滤空值:

ViewBag.BackUPDestinationList = ServiceBackupList
     .Where(x => !string.IsNullOrEmpty(x.SPPServerName)).Select(...)
     .Concat(ServiceBackupList.Where(x => !string.IsNullOrEmpty(x.SPServerName))
     .Select(...));