LINQ:从列表中查找具有所需键值的项目,如果不为null,则使用它执行某些操作

时间:2018-03-15 09:04:18

标签: .net list linq

我有类别列表,每个类别都有密钥Name和密钥Items,这是文件列表。 我想从列表中提取具有所需名称的类别(如果找不到,则返回null)。然后检查,如果类别不是null,请填写其Items ...

categories = List<Category>
var desiredCategory = categories.FirstOrDefault(c => c.Name == "DesiredName");

desiredCategory - if not null ?

foreach (var file in files)
{
    desiredCategory.Items.Add(file);
}

以上是我想要实现的代表性代码,我的问题是:如何以最简单的方式完成?使用LINQ或其他什么?

编辑:如果我不想对desiredCategory变量进行操作但是直接继续categories.FirstOrDefault(c => c.Name == "DesiredName")会怎样?

例如:

categories.FirstOrDefault(c => c.Name == "DesiredName").WhenIsNotNull()...

如何使用WhenIsNotNull的括号?

1 个答案:

答案 0 :(得分:0)

鉴于这些逻辑上是两个单独的动作(找到具有所需名称的类别,填充类别的项目),我不认为上述方法是一个问题。您可以稍微整理一下代码:

categories.SingleOrDefault(c => c.Name.Equals("desiredname", StringComparison.OrdinalIgnoreCase))

如果您确定只希望有一个或没有,请使用单个并捕获结果异常。比较字符串的值时,应使用Equals覆盖并提供比较提示。

然后,对于项目:

desiredCategory.Items.AddRange(files)

编辑后。

您可以使用扩展方法执行此操作:

public static void WhenNotNull<T>(this T item)
{
    if (item != default(T))
        // Do stuff
}