如何查询C#词典并返回一组特定值

提问

我的C#程序中有一个字典,其中包含键值列表.

值是itemid,Month,Year,Count

我想通过比较一组值(itemid,Month,Year)来查询字典,如果存在特定的itemid Month Year,则返回true或false.

因此,如果所有3个值(月中年)都存在,则返回true,否则返回false.

我尝试过这样的事情

(if (myd.Select(d => d.Value.itemid == item.itemid && d.Value.Month == DateRange.Month  && d.Value.Year == DateRange.Year).ToString() != "")

以上无效.

最佳答案

您似乎误解了Select()方法的用法.选择创建一个“投影”;给定元素的输入集合(可枚举),它将产生基数相等的可枚举输出,但由元素组成,每个元素都是输入的相应元素转换后的结果.

您需要的是Where()方法(从输入中返回基数等于或小于基数的列表),其中输入是布尔条件为true的元素),或者是Any()方法(返回一个与输入条件基数相等的列表).如果输入中的任何元素满足条件,则为“ true”或“ false”):

if(myd.Where(d => d.Value.itemid == item.itemid 
                && d.Value.Month == DateRange.Month 
                && d.Value.Year == DateRange.Year).Count() >= 1)
   ...

//produces the equivalent result but generally performs faster
if(myd.Any(d => d.Value.itemid == item.itemid 
                && d.Value.Month == DateRange.Month 
                && d.Value.Year == DateRange.Year))
   ...