如何使用LINQ过滤对象列表并从函数返回

时间:2012-05-17 19:47:03

标签: c# list

我正在尝试使用linq过滤C#中的Chord对象(类)列表。

我的课程中有以下功能

public List<Chord> FilterDictionary_byKey<Chord>(string theKey)
{
    var filteredList = from item in _chords
                       where item.KeyName == theKey
                       select item;

    return (List<Chord>)filteredList;
}

在上面的Chord中是一个对象类型,_chords是List类型的类变量。

然后从我的调用代码中我尝试了以下内容:

List<Chord> theChords = globalVariables.chordDictionary.FilterDictionary_byKey("A");

显然是尝试从类

返回已过滤的Chord对象列表

然而,当我编译编译器时返回

错误1无法从用法推断出方法'ChordDictionary.chordDictionary.FilterDictionary_byKey(string)'的类型参数。尝试显式指定类型参数。 C:\ Users \ Daniel \ Development \ Projects \ Tab Explorer \ Tab Explorer \ Forms \ ScaleAndChordViewer.cs 75 37 Tab Explorer

2 个答案:

答案 0 :(得分:2)

from ... select LINQ查询的推断类型实际上是IEnumerable<T>,它不是填充的列表或集合,而是将按需枚举的序列。将其强制转换为List<T>不会导致此枚举;相反,您应该致电ToList()ToArray()

要解决您遇到的错误:您的方法声明不应具有泛型类型参数,因为其返回类型或其任何参数都不是通用的。只需删除方法名称后面的<Chord>

public List<Chord> FilterDictionary_byKey(string theKey)
{
    var filteredList = from item in _chords
                       where item.KeyName == theKey
                       select item;

    return filteredList.ToList();
}

答案 1 :(得分:1)

List<Chord> theChords = globalVariables.chordDictionary.FilterDictionary_byKey<Chord>("A");