我有一个包含属性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如何,我都会获得父列表中的所有颜色。我希望分配给标题列表中标题的项目的颜色。 有没有办法实现这个目标?
答案 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在内部做同组的事。