检查Dictionary <datetime,list <classa =“”>&gt;的值有一个特定类型的ClassA使用linq?

时间:2017-05-27 00:37:12

标签: c# linq dictionary

我有这个词典:

Dictionary<DateTime, List<ClassA>> Delivery { get; set; }

和ClassA的定义如下:

public class ClassA
{       
    public string abc{ get; set; }
    public long Size{ get; set; }
    .....
}

我想检查使用linq,如果字典有字符串abc!= string.empty

所以我正在寻找这样的事情:

Delivery.Where(x => x.ClassB.classA.Values.Any(i => !String.isNullOrEmpty(i.abc))

但它没有编译,我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

您正在KeyValuePair语句中对字典中的.Where项进行迭代,因此您收到错误,因为ClassB不是KeyValuePair的属性。

下面的代码应该可以解决问题。在代码中,x表示来自Delivery的项目(KeyValuePair类型)。 Key的{​​{1}}属于x类型(我们并不关心),而DateTime的{​​{1}}类型为Value 1}},这是我们正在寻找的。

因此,xList<ClassA>,这意味着我们可以在该列表上调用x.Value并查看每个列表项(由List<ClassA>表示,这是一种类型Any)并查看它是否为空v属性:

ClassA

如果字典中的任何项目在项目abc中具有var hasItemWithEmptyAbc = Delivery.Any(x => x.Value.Any(v => string.IsNullOrEmpty(v.abc))); 的任何空或true属性,则返回.abc的布尔值}

如果您希望获取包含ClassA列表且包含空List<ClassA>属性的所有项目,则以下内容将为您提供ClassA的列表:

abc

或者,如果您只想获取项目本身(KeyValuePair<DateTime, List<ClassA>>具有空var itemsWithEmptyAbc = Delivery .Where(x => x.Value.Any(v => string.IsNullOrEmpty(v.abc))) .ToList(); 属性的实例,您可以执行以下操作:

ClassA