1

我正试图从 Objects 中,特别是在字典中,围绕 LINQ,但失败得很厉害。

我在 SO 的几个线程中看到了这种语法:

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

但是当我尝试编译它时,我收到一个语法错误:源类型为“System.Collections.Generic.Dictionary”的查询表达式中的后续 from 子句中不允许使用“OperationsPlannerData.OperationsTaskLabeledData”类型的表达式。对“SelectMany”的调用中的类型推断失败。

怎么了?我的 Visual Studio 是否太旧?(男孩不会让我感到惊讶。)我正在使用 VS 2008。

这是推荐此用法的线程之一的链接:

在 C# 中使用 LINQ 进行字典操作

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

4

4 回答 4

4

您在 OP 中缺少选择,但此答案适用于您的最后一段。

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

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

于 2013-05-31T18:48:19.010 回答
1

不确定您的问题是否有错字,但您缺少select s部分

var items = (from pair in m_taskDictionary
    from s in pair.Value
    select s).Distinct().ToList();  // <-- added select here
于 2013-05-31T18:49:24.683 回答
1

尝试这个

 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您正在搜索的字符串属性。

于 2013-05-31T18:52:56.267 回答
0

我相信你错过了选择:

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

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

于 2013-05-31T18:49:09.813 回答