从对应于另一个属性的对象列表中获取属性列表

时间:2016-03-02 08:21:33

标签: c# linq

我有一个包含属性Id,Title和Color的对象列表。具有特定Id的每个项目都分配有标题和颜色。我想要两个列表1)所有标题的列表和所有颜色的列表。

我从列表中获得了标题

var dataSet = mList.Select (c => c.Title).Distinct.ToList();

现在我想要颜色列表,对应于dataSet中的标题。

如果我这样做:

var colordataSet = mList.Select (c => c.Color).Distinct.ToList();

无论标题/ ID如何,我都会获得父列表中的所有颜色。我希望分配给标题列表中标题的项目的颜色。 有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

我会使用字典并使用System.Linq.ToDictionary的{​​{3}}转换列表:

Dictionary<string,Color> dict = mList.ToDictionary(c => c.Title,  //Keyselector
                                                   c => c.Color); //Elementselector

然后你可以获得标题的相应颜色:

Color color = dict["ColorForThisTitle"];

修改:要在字典中使用不同的Title

var dict = mList.GroupBy(k => k.Title, (k,c) => c.FirstOrDefault())
                .ToDictionary(c => c.Title,
                              c => c.Color); 

答案 1 :(得分:1)

为简化@Alexander所做的事情......您可以使用ToLookUp

var getColorsbyTitle = mList.ToLookUp(c=>c.Title,c=>c.Color);

//you can use this like below

var color  = getColorsByTitle("xyz").FirstorDefault(); 

注意:这与ToDictionary在内部做同组的事。