LINQ基础知识,我如何做一个groupby并在最后得到一个字符串?

时间:2011-02-17 21:34:54

标签: c# linq lambda

您好,我有一个类似的课程

class myclass
{
    public string string1;
    public string string2;
    public string string3;
}

我有一个列表,我想生成一个唯一string1的字符串列表。

List<myclass> myInstance = GetInstanceOfMyClass();

MethodThatRequiresListOfStrings( myInstance.GroupBy(p => ??????? .ToList<string>());

什么会取代??????? ?

我不敢相信,如果没有使用lambda表达式进行分组,我已经走了这么久......

4 个答案:

答案 0 :(得分:2)

  

我想生成一个字符串列表   unique string1 s。

在这种情况下,您不需要分组操作;您可能想要使用Distinct运算符:

var distinctString1s = myInstance.Select(p => p.string1)
                                 .Distinct()
                                 .ToList();

MethodThatRequiresListOfStrings(distinctString1s);

换句话说,通过将每个myclass实例投影string1字段来构造一个新序列,然后加载 的distict项>序列到列表中。

答案 1 :(得分:1)

在这种情况下,我根本不会使用分组。如果您只想要 distinct string1值,请使用Distinct()

myInstance.Select(obj => obj.string1).Distinct(); // .ToList()

如果您想了解如何分组,请考虑

myInstance.GroupBy(obj => obj.string1).Select(grp => grp.Key); // .ToList()

然而,再次,我会选择第一个选项。

答案 2 :(得分:0)

不需要GroupBy:

var distinctString1s = myInstance.Select(x => x.string1)
                                 .Distinct()
                                 .ToList();

答案 3 :(得分:0)

MethodThatRequiresListOfStrings(myInstance.Select(s=>s.string1).Distinct().ToList());