2012-07-25 34 views
3

我有一个LINQ查询是这样的: 两个列表通过实体框架的导航属性链接(这两个实体有许多一对多的关系)LINQ选择新KeyValuePair <T,List<T2>>

我想转换此:

var query = (from a in listA 
      from b in a.ListB 
      select new {T1=a, T2=b} 

为了像这样:

var query = (from a in listA 
      from b in a.ListB 
      select new KeyValuePair<T1,List<T2>>{ T1=a , T2=b}) 

第一查询产生这样的项的列表:{(A,X),(A,Y),(A,Z),( b,X )...}

第二个查询的目的是将结果合并到具有自己列表的项目中。

结果是这样的:

{(一,列出与物品X,Y,Z),(B,用列表项x)...}

我会很感激的帮助。谢谢!

回答

6

编辑:感谢Stijn纠正我的答案。

它看起来像a已经包含相关的b项目的清单,所以不会这项工作?

var query = (from a in listA 
      select new{ T1 = a, T2 = a.ListB }); 

您还可以将查询转换字典:

var asDictionary = query.ToDictionary(item => item.T1, item => item.T2); 
+0

哦,好点...我错过了,这是'a.ListB'并不仅仅是'listB'。 :P – Ryan 2012-07-26 00:39:30

+0

@minitech我不得不看两次代码注意。希望这只是一个简单的例子,并不负责发射导弹!另外需要注意的是,多个'from'语句通过每个组合,有点像嵌套的'foreach'语句。 – 2012-07-26 01:19:07

+0

这段代码完全错误。对象初始化程序中的“T1”和“T2”是什么?它应该是'Key'和'Value'。不过,这也行不通,因为'Key'和'Value'是只读的。 – Stijn 2013-05-28 09:14:57

相关问题