1

LINQ を使用して DTO のコレクションを単一の DO にフラット化したいのですが、私の LINQ-fu は弱いです。

私のDTOは次のようになります。

public class DTO {
   Product product,
   Location location,
   MonthPeriod month,
   double Data
}

そして、次のスキーマを使用して SQL データベース テーブルにマップします。

ProductID int,
LocationID int,
MonthPeriodID int,
Data numeric(18,6)

Product、Location、Month はすべて、次のような LookupEntity から継承されます。

public class LookupEntity {
    string Name,
    int Id
}

次に、次のような DO があります。

public class DO {
    Product product,
    Location location,
    IList<DataValue> values
}

DataValue は、次のような値オブジェクトです。

public class DataValue {
    MonthPeriod Month
    double Data
}

NHibernate を使用して DTO のリストを取得することはできますが、DO にフラット化するのに問題があります。LINQ を使用して DO を作成したいと考えています。月ごとのデータを含む DataValue オブジェクトのリストを使用して、Product と Location をキーにした DO のコレクションを取得するには、どうすればよいですか?

言い換えると...

ソース データ セットの例を次に示します。

製品: 場所: 月: データ:
製品 A MI 1 月 10 日
ProductA MI 2月20日
製品 A MI 3 月 30 日
製品 B CA 100 年 1 月
製品 B CA 200 年 2 月
製品 C CA 300 年 3 月

それをDTOにうまくマッピングできます。ここで、LINQ を使用して DO の 2 つのインスタンスを取得したいと考えています。各インスタンスには、DataValue の 3 つのインスタンスを含むリストがあります。

4

1 に答える 1

2
from x in DTOs
group new DataValue() {MonthPeriod = x.Month, Data = x.Data}
  by new {Product = x.Product, Location = x.Location}
  into g
select new DO()
{
  product = g.Key.Product,
  location = g.Key.Location,
  value = g.ToList()
};

Product、Location、および Month は参照型である可能性があるため、参照の等価性に注意してください。

于 2010-10-18T02:44:27.987 に答える