Linq GroupBy 不投影所有属性
Linq GroupBy not projecting all properties
我有一个 List<>
的位置评论,我写的 GroupBy 准确地将它们分组。但是,它只允许投影两个项目,我找不到(谷歌搜索)如何投影其他属性。
在查看 GroupBy 定义时,我什至不确定它是否是用于我想要的结果的正确扩展方法,但我找不到任何替代方法。
我未分组的集合是 List<T>
我只是使用 json 符号来传达结构。
userLocationReviews {
userReview[0] {
BusinessId="1234",
BusinessName="Wonka Chocolate",
LocationId = "443456",
CityName="MyTown",
RatingVale=5
}
userReview[1] {...}
userReview[2] {...}
...
userReview[100] {...}
}
我写了这个 GroupBy,它是正确的。
var groupedReviewedLocations = userLocationReviews.UserReviews.GroupBy(
p => p.LocationId,
p => p.RatingValue,
(locId, rating) => new {LocationId = locId, Ratings = rating.ToList() });
同样,这是一个列表,只是使用 json 来显示结构而不是屏幕片段。
groupedReviewLocations {
Non-Public Members {...},
ResultsView {
[0]{
LocationId: "1234",
Ratings: {
0:3,
1:5,
2:1,
3:5
}
},
[1]{...},
.....
[15]{...}
}
}
但是如上所述,如何将其他属性放入投影中?
groupedReviewLocations {
Non-Public Members {...},
ResultsView {
[0]{
LocationId: "1234",
Ratings: {},
BusinessName: "Wonka Chocolate",
CityName: "MyTown"
},
[1]{...},
.....
[15]{...}
}
}
删除
p => p.RatingValue,
整行
分组依据由 LocationId 完成,但使用 GroupBy 的这个特定重载:
GroupBy(
key-chooser,
value-chooser,
(Key, Values) list-processor
)
您要在第二个参数(值选择器)的输出列表中指定 属性。
如果改为使用此重载:
GroupBy(
key-chooser,
(Key, Values) list-processor
)
该值被自动确定为整个输入对象。您也可以更改 p => p.RatingValue,
,使其只是 p => p,
以获得相同的效果(如果这有助于您了解正在发生的事情)
将 (locId, rating)
更改为 (locId, reviewedLocations)
是有意义的,因为该 lambda 的第二个参数现在将是共享密钥的位置对象列表,而不仅仅是评级列表.另外,因为第二个参数(你叫它 rating
,我叫它 reviewedLocations
)是一个 collection/multiple 的东西,所以给它一个复数名称是有意义的
我有一个 List<>
的位置评论,我写的 GroupBy 准确地将它们分组。但是,它只允许投影两个项目,我找不到(谷歌搜索)如何投影其他属性。
在查看 GroupBy 定义时,我什至不确定它是否是用于我想要的结果的正确扩展方法,但我找不到任何替代方法。
我未分组的集合是 List<T>
我只是使用 json 符号来传达结构。
userLocationReviews {
userReview[0] {
BusinessId="1234",
BusinessName="Wonka Chocolate",
LocationId = "443456",
CityName="MyTown",
RatingVale=5
}
userReview[1] {...}
userReview[2] {...}
...
userReview[100] {...}
}
我写了这个 GroupBy,它是正确的。
var groupedReviewedLocations = userLocationReviews.UserReviews.GroupBy(
p => p.LocationId,
p => p.RatingValue,
(locId, rating) => new {LocationId = locId, Ratings = rating.ToList() });
同样,这是一个列表,只是使用 json 来显示结构而不是屏幕片段。
groupedReviewLocations {
Non-Public Members {...},
ResultsView {
[0]{
LocationId: "1234",
Ratings: {
0:3,
1:5,
2:1,
3:5
}
},
[1]{...},
.....
[15]{...}
}
}
但是如上所述,如何将其他属性放入投影中?
groupedReviewLocations {
Non-Public Members {...},
ResultsView {
[0]{
LocationId: "1234",
Ratings: {},
BusinessName: "Wonka Chocolate",
CityName: "MyTown"
},
[1]{...},
.....
[15]{...}
}
}
删除
p => p.RatingValue,
整行
分组依据由 LocationId 完成,但使用 GroupBy 的这个特定重载:
GroupBy(
key-chooser,
value-chooser,
(Key, Values) list-processor
)
您要在第二个参数(值选择器)的输出列表中指定 属性。
如果改为使用此重载:
GroupBy(
key-chooser,
(Key, Values) list-processor
)
该值被自动确定为整个输入对象。您也可以更改 p => p.RatingValue,
,使其只是 p => p,
以获得相同的效果(如果这有助于您了解正在发生的事情)
将 (locId, rating)
更改为 (locId, reviewedLocations)
是有意义的,因为该 lambda 的第二个参数现在将是共享密钥的位置对象列表,而不仅仅是评级列表.另外,因为第二个参数(你叫它 rating
,我叫它 reviewedLocations
)是一个 collection/multiple 的东西,所以给它一个复数名称是有意义的