ストアからデータを取得し、そこから DTO のコレクションを作成する Linq to Entities コードがいくつかあります...
List<VRTSystemOverview> systems = query.OrderBy(s => s.DHRNumber)
.Select(s => new VRTSystemOverview {
ID = s.ID,
SystemNumber = s.SystemNumber
// other properties removed for clarity...
})
.ToList();
query は、現在のコンテキストに基づいて、いくつかのフィルタリングが適用された、列挙されていないクエリです。
ここで、パイプで区切られた文字列である新しいプロパティをこの DTO に追加したいと考えています。これは、元のシステム オブジェクトの子プロパティのコードで構成されています。これは、クライアントでのフィルタリングに使用されます。
ナビゲーションは次のように機能します。各システムには製品構成があり、各製品構成には多数の価格表エントリがあり、それぞれにコードがあります。したがって、私は次のことができるはずだと考えました...
List<VRTSystemOverview> systems = vrtSystemsBasicQuery.OrderBy(s => s.DHRNumber)
.Select(s => new VRTSystemOverview {
ID = s.ID,
SystemNumber = s.SystemNumber,
PriceBookCodes = s.ProductConfiguration
.ProductConfigurations_PriceBook
.Select(pb => pb.PriceBook.ProductCode)
.Aggregate("", (s1, a) => s1 += "|" + a)
})
.ToList();
ただし、Aggregate メソッドの 2 番目の「s1」は赤で下線が引かれ、コンパイラは「式ツリーには代入演算子が含まれていない可能性があります」というエラーを出します。
これが何を意味するのか、どのように回避するのかを説明できる人はいますか? 私はいくつかの検索を行いましたが、問題が何であるかを見つけることができません。式ツリーについて調べてみましたが、それが何であるかを実際に理解できませんでした。これが問題である可能性があります。
私はこのプロジェクトの他の場所でもまったく同じことをしましたが、それはメモリ内のコレクションで動作しており、Linq to Entities を使用したものではなく、違いがある可能性があります。