Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查字典的值是否为<;日期时间,列表<;ClassA>&燃气轮机;是否有使用linq的特定类型的ClassA?_C#_Linq_Dictionary - Fatal编程技术网

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