使用Linq创建KeyValuePair <byte,string [] =“”>

时间:2017-04-03 06:41:17

标签: c# entity-framework linq

我正在使用.NET Framework 4.6.2,Entity Framework 6.1.3和Repository模式开发一个C#库。

我想在select中创建private,如下所示:

KeyValuePair<byte, string[]>

但是Dictionary<string, byte> dict = GetAggregationLevelsNameId(arvatoConnectionString, productionOrderId); KeyValuePair<byte, string[]>[] codes = null; List<Data.Code> aCodes = repo.SearchFor(c => c.ProductionOrderId == productionOrderId).ToList(); if ((aCodes != null) && (aCodes.Count > 0)) { codes = aCodes .Select(ac => new { ac.Level, ac.Serial }) .AsEnumerable() .Select(ac => new KeyValuePair<byte, string[]>(dict[ac.Level], ac.Serial)) .ToArray(); } 我收到以下错误:

  

无法将字符串转换为字符串[]。

如何在该选择中创建.Select(ac => new KeyValuePair<byte, string[]>(dict[ac.Level], ac.Serial))

我想将KeyValuePair<byte, string[]>的所有ac.Serial分组到ac.Level

KeyValuePair是一个结构,我没有在任何地方声明它。我在这里创建ac

Select(ac => new { ac.Level, ac.Serial })ac.Level
stringac.Serial

更新
我有这个代码可以将select转换为string(请注意,以下字典的密钥为Dictionary,而不是我想要创建的string密码:

byte

更新2
GenericRepository<Data.Code> repo = new GenericRepository<Data.Code>(context); codes = repo .SearchFor(c => c.ProductionOrderId == productionOrderId) .GroupBy(c => c.Level) .ToDictionary(dic => dic.Key, dic => dic.Select(c => c.Serial).ToList()); 是一个POCO对象,表示一个数据库表,其中有很多Data.Code具有相同的Serial

1 个答案:

答案 0 :(得分:2)

试试这个

codes =
    aCodes
        .AsEnumerable()
        .GroupBy(ac => dict[ac.Level])
        .Select(ac => new KeyValuePair<byte, string[]>(ac.Key, ac.Select(a => a.Serial).ToArray()))
        .ToArray();

或者到字典:

codes =
    aCodes
        .AsEnumerable()
        .GroupBy(ac => dict[ac.Level])
        .ToDictionary(ac => ac.Key, ac.ToArray());