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

时间:2020-03-05 18:46:42  来源:igfitidea点击:

我有一个Foo的清单。

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

我想使用LINQ来获取Foo列表中Foo.Bar的不同值的string []。

我怎样才能做到这一点?

解决方案

回答

试试这个:

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

回答

如果要使用流利的模式,这应该可以工作:

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

回答

我去lambdas ... Wayyy更好

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

与@lassevk发布的功能相同。

我还要补充一点,我们可能要等到最后一刻才能转换为数组。

LINQ在后台进行了一些优化,查询保持其查询形式,直到明确需要为止。因此,我们可能需要先将所需的所有内容构建到查询中,以便将所有可能的优化措施一并应用。

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

回答

我们不应该能够执行以下操作:

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