だから私はこれについてSOや他の場所で約20の例を見てきましたが、私がやろうとしていることをカバーするものは見つかりませんでした. これ -明示的な型コンパレータをインラインで指定できますか? -必要なもののように見えますが、十分ではありません (または、それをさらに進める方法がわかりません)。
- LoadData のリストがあり、LoadData オブジェクトには参照型と値型の両方のフィールドがあります
- 参照フィールドと値フィールドの混合物をグループ化し、出力を匿名型に射影する必要がある
GroupBy フィールドを比較する方法を指定するためにカスタム IEqualityComparer を提供する必要があります (私は思います)が、それらは匿名型です
private class LoadData { public PeriodEndDto PeriodEnd { get; set; } public ComponentDto Component { get; set; } public string GroupCode { get; set; } public string PortfolioCode { get; set; } }
これまでに行った中で最高の GroupBy クエリ:
var distinctLoads = list.GroupBy(
dl => new { PeriodEnd = dl.PeriodEnd,
Component = dl.Component,
GroupCode = dl.GroupCode },
(key, data) => new {PeriodEnd = key.PeriodEnd,
Component = key.Component,
GroupCode = key.GroupCode,
PortfolioList = data.Select(d=>d.PortfolioCode)
.Aggregate((g1, g2) => g1 + "," + g2)},
null);
これはグループ化されていますが、まだ重複があります。
- GroupBy フィールドを比較するカスタム コードを指定するにはどうすればよいですか? たとえば、コンポーネントは Component.Code で比較できます。