我有一个项目集合,每个项目都包含一个辅助集合.我需要根据次要项目的总集生成新项目列表.例如,如果你有一个狗的列表,每只狗有一个朋友列表,我需要所有狗的所有狗朋友的总清单.
通常我会使用SelectMany执行此操作,但这里的难点是我的辅助对象不包含对父对象的引用,并且新列表需要包含来自辅助对象和父对象的字段.即如下
var dogs = List<Dog>
var newList = dogs.SelectMany(i => i.DogFriends).Select(dogFriend => new NewObject
{
fieldOne = dog.propertyOne,
fieldTwo = dog.propertyTwo
fieldThree = dogFriend.propertyOne
});
Run Code Online (Sandbox Code Playgroud)
在上面,我没有提到狗,所以我不能选择那些.
我正在寻找的是一种在SQL中连接两个表的方法,因此您可以从两个对象中选择值.但我希望总值与子对象的总数相匹配.即如果你有3只狗,每只3个朋友,最终列表将有9个对象.
如何使用LINQ实现这一目标?
Maa*_*ten 10
确实.SelectMany(...)是答案.另一种用法是:
var data = dogs
.SelectMany(d => d.DogFriends.Select(df => new { d, df })
.Select(x =>
// Now you can use both d and df
new NewObject {
fieldOne = x.d.propertyOne,
fieldTwo = x.d.propertyTwo
fieldThree = x.df.propertyOne
}
)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
更简单的是使用查询LINQ表示法.这基本上在编译时转换为上述内容.
var data = from d in dogs
from df in d.DogFriends
select new NewObject {
fieldOne = d.propertyOne,
fieldTwo = d.propertyTwo
fieldThree = df.propertyOne
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5405 次 |
| 最近记录: |