C# C:LINQ查询字典语法错误,尽管在SO中重复使用

C# C:LINQ查询字典语法错误,尽管在SO中重复使用,c#,linq,dictionary,C#,Linq,Dictionary,我正试图从对象(尤其是字典)中绕过LINQ,结果失败得很惨 我在几个线程中看到了这种语法,因此: var items = (from pair in m_taskDictionary from s in pair.Value s).Distinct().ToList(); 但当我试图编译它时,我得到了一个语法错误: 源类型为“System.Collections.Generic.Dictionary”的查询表达式的后续from子句中不允许使用“OperationsPl

我正试图从对象(尤其是字典)中绕过LINQ,结果失败得很惨

我在几个线程中看到了这种语法,因此:

var items = (from pair in m_taskDictionary
    from s in pair.Value
     s).Distinct().ToList();    
但当我试图编译它时,我得到了一个语法错误: 源类型为“System.Collections.Generic.Dictionary”的查询表达式的后续from子句中不允许使用“OperationsPlannerData.OperationsTaskLabeledData”类型的表达式。调用“SelectMany”时类型推断失败

怎么了?我的VisualStudio太旧了吗?男孩,这不会让我感到惊讶。我用的是VS2008

下面是一个链接,指向推荐此用法的其中一个线程:


简而言之,我想解决的问题是:我想在字典中找到Value对象中特定字段与给定字符串匹配的第一项。在我的应用程序中,为了一个目的,我已经有了由整数键入的字典,所以我宁愿使用该字典。SO中的各种线程建议为此使用列表对象。我可以很容易地创建那个对象,但我也不知道如何搜索那个结构。

您的OP中缺少一个select,但这个答案是针对您的最后一段

m_taskDictionary.First(kvp => kvp.Value.WhateverFieldYouNeed == someString);

如果您希望它在找不到匹配元素的情况下返回引用类型的默认值null,请使用FirstOrDefault。

您的OP中缺少select,但此答案适用于您的最后一段

m_taskDictionary.First(kvp => kvp.Value.WhateverFieldYouNeed == someString);

如果您希望它在找不到匹配元素时返回引用类型的默认值null,请使用FirstOrDefault。

我认为您缺少选择:

var items = (from pair in m_taskDictionary
    from s in pair.Value
     select s).Distinct().ToList(); 

我相信您错过了选择:

var items = (from pair in m_taskDictionary
    from s in pair.Value
     select s).Distinct().ToList(); 

不确定你的问题是否有输入错误,但你缺少选择的部分


不确定你的问题是否有输入错误,但你缺少选择的部分

试试这个

 var items = (from value in m_taskDictionary.Values 
              where value.field == "a given string" 
              select value).Distinct().ToList(); 
你的字典是什么类型的

 Dictionary<int, CustomObject> m_taskDictionary = new Dictionary<int, CustomObject>();
CustomObject类有一个名为field的字符串属性,您正在对其进行搜索

试试这个

 var items = (from value in m_taskDictionary.Values 
              where value.field == "a given string" 
              select value).Distinct().ToList(); 
你的字典是什么类型的

 Dictionary<int, CustomObject> m_taskDictionary = new Dictionary<int, CustomObject>();

CustomObject类有一个名为field的字符串属性,您正在对其进行搜索

你的价值观是什么类型的?你的第二个from表示你认为它是某种类型的列表,但可能不是?如果你给出更具体的代码,我可以发布更准确的代码。你的值的类型是什么?你的第二个from表示你认为它是某种类型的列表,但可能不是?如果你给出更具体的代码,我可以发布更准确的代码。