0

我有 5 个领域的课程。

public class Test
{
public string name;
public string description;
public int int1;
public int int2;
public int int3;
}

在我的一项功能中,我List<Test> list有 10 个项目。在这里,我想要SortedList<string,string>两个属性名称和描述。

我知道,我可以使用它来实现这一点,for each但我想知道如何使用 LINQ 来做到这一点?

4

3 回答 3

4

用这个:

var result = list.OrderBy(x => x.Name).ThenBy(x => x.Description);

重要的:

  1. 不要使用多个调用,OrderBy因为它们会相互覆盖。
  2. 排序后的结果将在result. 原件list保持不变。
于 2012-09-10T13:15:46.163 回答
2

@HugoRune 的答案非常详尽,但是因为您说要使用 Linq,所以我建议在您的范围内添加一个扩展方法来帮助您实现目标:

static class SortedListExtensions
{
    public static SortedList<K, V> ToSortedList<K, V, T>(
        this IEnumerable<T> source, 
        Func<T, K> keySelector, Func<T, V> valueSelector)
    {
        return new SortedList<K,V>(
            source.ToDictionary(
                cur => keySelector(cur), 
                cur => valueSelector(cur)));
    }
}

这样,您的 SortedList 创建可以在 Linq 计算中组合:

var sl = list.ToSortedList(f => f.name, f => f.description);
于 2012-09-10T14:20:05.500 回答
1

AC# SortedList 是一种字典,实际上不是列表。如果您确实想要一个包含名称作为键和描述作为值的 SortedList,则可以使用以下命令:

SortedList slist = new SortedList(list.ToDictionary(t=>t.name, t=>t.description))

请注意,如果名称出现两次,这将引发异常,因为字典键必须是唯一的。

然而,对于大多数实际目的,我会使用 Daniel Hilgarth 发布的解决方案,除非您有一个库函数特别需要 SortedList 作为参数。

于 2012-09-10T14:12:18.317 回答