C# 检查字典的值是否为<;日期时间,列表<;ClassA>&燃气轮机;是否有使用linq的特定类型的ClassA?
我有这本字典:C# 检查字典的值是否为<;日期时间,列表<;ClassA>&燃气轮机;是否有使用linq的特定类型的ClassA?,c#,linq,dictionary,C#,Linq,Dictionary,我有这本字典: Dictionary<DateTime, List<ClassA>> Delivery { get; set; } 我想使用linq检查字典是否有字符串abc!=string.empty 所以我在找这样的东西: public class ClassA { public string abc{ get; set; } public long Size{ get; set; } ..... } Delivery.Whe
Dictionary<DateTime, List<ClassA>> Delivery { get; set; }
我想使用linq检查字典是否有字符串abc!=string.empty
所以我在找这样的东西:
public class ClassA
{
public string abc{ get; set; }
public long Size{ get; set; }
.....
}
Delivery.Where(x => x.ClassB.classA.Values.Any(i => !String.isNullOrEmpty(i.abc))
var classAsWithEmptyAbc = Delivery
.SelectMany(x => x.Value.Where(c => string.IsNullOrEmpty(c.abc)))
.ToList();
但它不是编译,我如何进行此检查?您在
.Where
语句中迭代字典中的KeyValuePair
项,因此您得到一个错误,因为ClassB
不是KeyValuePair
的属性
类似下面的代码应该可以做到这一点。在代码中,x
表示来自Delivery
的项目(这是KeyValuePair
类型)。x
的键属于类型DateTime
(我们不关心它),而x
的值属于类型List
,这就是我们正在寻找的
因此,x.Value
是一个列表
,这意味着我们可以调用该列表中的任何
,查看每个列表项(由v
表示,类型为ClassA
),并查看它是否具有null或空的abc
属性:
var hasItemWithEmptyAbc = Delivery.Any(x => x.Value.Any(v => string.IsNullOrEmpty(v.abc)));
如果字典中的任何项在项的列表中有ClassA
的abc
属性,则返回一个布尔值true
如果您想获取包含带有空abc
属性的ClassA
列表的所有项目,下面将为您提供KeyValuePair
列表:
或者,如果您只想获取项目本身(具有空abc
属性的ClassA
实例),您可以执行以下操作:
public class ClassA
{
public string abc{ get; set; }
public long Size{ get; set; }
.....
}
Delivery.Where(x => x.ClassB.classA.Values.Any(i => !String.isNullOrEmpty(i.abc))
var classAsWithEmptyAbc = Delivery
.SelectMany(x => x.Value.Where(c => string.IsNullOrEmpty(c.abc)))
.ToList();
最初我像你一样拥有它,但我想把它赋给一个变量并从值中读取,这就是我使用Where的原因。问题是编译器无法识别字段abc,因为字段abc实际上是类a中字典的值,而该值是一个列表,所以我必须另一个Any()在这方面。哦,我明白了。我添加了更多的方法来提取数据。一种是获取所有KeyValuePair
对象的列表,这些对象的list
包含一个ClassA
和一个空.abc
,另一种是只获取ClassA
对象和一个空.abc
。