1

.NET 4,我有

public class Humi
{
public int huKey { get; set; }
public string huVal { get; set; }
}

在另一个类中是这个方法中的代码:

IEnumerable<Humi> someHumi = new List<Humi>(); //This is actually ISingleResult that comes from a LinqToSql-fronted sproc but I don't think is relevant for my question
var humia = new Humi { huKey = 1 , huVal = "a"};
var humib = new Humi { huKey = 1 , huVal = "b" };
var humic = new Humi { huKey = 2 , huVal = "c" };
var humid = new Humi { huKey = 2 , huVal = "d" };

我想创建一个 IDictionary<int,string[]>

键 1 包含 ["a","b"] 键 2 包含 ["c","d"]

谁能指出使用 Linq 进行这种转换的一种不错的方法?

谢谢。

4

2 回答 2

2
var myDict = someHumi
    .GroupBy(h => h.huKey)
    .ToDictionary(
        g => g.Key,
        g => g.ToArray())

创建一个IEnumerable<IGrouping<int, Humi>>然后将其投影到字典中。Note.ToDictionary返回一个字典,而不是一个 IDictionary。

于 2011-05-09T02:20:21.690 回答
2

您可以使用ToLookup(),它允许每个键保存多个值,这正是您的场景(请注意,每个键将保存一个IEnumerable<string>值,尽管不是数组):

var myLookup = someHumi.ToLookup(x => x.huKey, x => x.huVal);

foreach (var item in myLookup)
{
    Console.WriteLine("{0} contains: {1}", item.Key, string.Join(",", item));
}

输出:

1 包含:a,b

2 包含:c、d

于 2011-05-09T02:20:45.823 回答