如何从内存列表中获取一系列不同的属性值?

时间:2008-09-02 20:08:52

标签: c# .net performance linq filtering

我有一个Foo列表。

Foo有一个名为Bar的字符串属性。

我想使用 LINQ 在Foo列表中为Foo.Bar获取不同值的字符串[]。

我该怎么做?

4 个答案:

答案 0 :(得分:5)

我会去lambdas ...更好的方式

var bars = Foos.Select(f => f.Bar).Distinct().ToArray();

与@lassevk发布的内容相同。

我还要补充一点,你可能希望在最后一刻之前不要转换为数组。

LINQ在幕后做了一些优化,查询保留在查询表单中直到明确需要。因此,您可能希望首先在查询中构建所需的所有内容,以便完全应用任何可能的优化。

通过评估,我的意思是要求明确要求评估的内容,如“Count()”或“ToArray()”等。

答案 1 :(得分:3)

如果您想使用流畅的模式,这应该有效:

string[] arrayStrings = fooList.Select(a => a.Bar).Distinct().ToArray();

答案 2 :(得分:2)

试试这个:

var distinctFooBars = (from foo in foos
                       select foo.Bar).Distinct().ToArray();

答案 3 :(得分:0)

你不应该做类似的事情:

var strings = (from a in fooList select a.Bar).Distinct();
string[] array = strings.ToArray();