我有这个词典:
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))
但它没有编译,我该怎么做呢?
答案 0 :(得分:2)
您正在KeyValuePair
语句中对字典中的.Where
项进行迭代,因此您收到错误,因为ClassB
不是KeyValuePair
的属性。
下面的代码应该可以解决问题。在代码中,x
表示来自Delivery
的项目(KeyValuePair
类型)。 Key
的{{1}}属于x
类型(我们并不关心),而DateTime
的{{1}}类型为Value
1}},这是我们正在寻找的。 p>
因此,x
是List<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