C# LINQ选择新的KeyValuePair<;T、 列表<;T2>&燃气轮机;
我有这样一个LINQ查询: 通过实体框架导航属性链接的两个列表(两个实体都具有多对多关系) 我想将其转换为:C# LINQ选择新的KeyValuePair<;T、 列表<;T2>&燃气轮机;,c#,linq,entity-framework,C#,Linq,Entity Framework,我有这样一个LINQ查询: 通过实体框架导航属性链接的两个列表(两个实体都具有多对多关系) 我想将其转换为: 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 KeyV
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})
var query=(来自列表a中的
从a中的b开始
选择新的KeyValuePair{T1=a,T2=b})
第一个查询生成如下项的列表:{(a,x)、(a,y)、(a,z)、(b,x)…}
第二个查询的目的是将结果合并到具有自己列表的项中
结果如下所示:
{(a,包含项目x、y、z的列表),(b,包含项目x的列表)…}
我很感激你的帮助。谢谢 编辑:感谢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);
哦,说得好。。。我没有注意到它是
a.ListB
,而不仅仅是ListB
:P@minitech我必须看两遍代码才能注意到。希望这只是一个简单的例子,不负责发射导弹!另一件需要注意的事情是,多个from
语句贯穿每一个组合,有点像嵌套的foreach
语句。这个片段完全错误。对象初始化器中的T1
和T2
是什么?它应该是键
和值
。不过,这也不行,因为键
和值
都是只读的。@Stijn有趣的一点。实际上,我们根本不需要KeyValuePair,只需要执行new{T1=a,T2=a.List}
,对吗?对。然后,如果需要,您可以使用.ToDictionary(item=>item.T1,item=>item.T2)创建一个字典
。如果你能更新你的答案,我会把反对票改为赞成票。