NorthWind
Linq を使用して、一般的な DB から次のレポートを生成しようとしています。Customer
、でグループ化する必要がありますOrderYear
。
CustomerName OrderYear Amount
次の表を使用する必要がCustomer
ありOrder
ますOrder Details
。これまでのところ、これは私がやったことです。
NorthwindDataContext north = new NorthwindDataContext();
var query = from o in north.Orders
group o by o.Customer.CompanyName into cg
select new
{
Company = cg.Key,
YearGroup = ( from y in cg
group y by y.OrderDate.Value.Year into yg
select new
{
Year = yg.Key,
YearOrdes = yg
}
)
};
foreach (var q in query)
{
Console.WriteLine("Customer Name : " + q.Company);
foreach (var o in q.YearGroup)
{
Console.WriteLine("Year " + o.Year);
Console.WriteLine("Sum " + o.YearOrdes.Sum(yo => yo.Order_Details.Sum( yd=> Convert.ToDecimal(yd.UnitPrice* yd.Quantity))));
}
Console.WriteLine();
}
それは私に期待される結果を与えています。t-sql
バックエンドで動かして比較してみましたが、2つ質問があります。
- Inner
foreach
では、2 番目のステートメントが合計を生成します。適切なアプローチですか?それとももっと良いものがありますか? - Linq クエリ自体で Sum を取得する方法。