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 的东西,所以给它一个复数名称是有意义的