使用linq的EF对象列表到列表的列表

时间:2012-02-01 17:31:10

标签: c# linq entity-framework-4

我想将EF对象列表转换为字典。我有点完成了这个,有一个缺点:我无法弄清楚如何根据该对象的属性将多个对象添加到一个key,value对。

例如,假设我有一个实体框架对象TblValue,其中包含三个值 - ValueID, ValueNm, CodeID

CodeID将在对象之间共享 - 有些可能是相同的,有些可能是不同的。

我想创建一个Dictionary<TblCode, List<TblData>>。 (TblCode来自CodeID。)基本上,我想创建一个这个项目列表的字典,其中每个列表都是分开的&amp;使用LINQ。

CodeID分组

我之前使用的LINQ语句正在运行,但它不会进行任何分组。这是非常接近,还是LINQ不适合这个? foreach循环会更好吗?

var splitTimes = times.Cast<TblValue>().ToDictionary(o => tr.GetCode(o.CodeID));

澄清 - 我无法对值进行分组....我无法创建Dictionary<TblCode, List<TblValue>>,我只能创建Dictionary<TblCode, TblValue>

2 个答案:

答案 0 :(得分:2)

您需要先分组然后转换为字典。像那样:

var dictionary = tblValues
      .GroupBy(table => table.CodeID)
      .ToDictionary(values => values.Key);

如果您需要转换密钥,请在GroupBy()ToDictionary()

中执行此操作

答案 1 :(得分:2)

我找到了一种方法,the_joric的答案很接近,但我必须在值上明确地调用ToList()

var splitTimes = times.GroupBy(x => x.ProjCdId).ToDictionary(o => tr.GetProjCd(o.Key), o => o.ToList());