3

DB を MySQL (ODBC を使用) から MS SQL に移行しており、SQL クエリを LINQ に「変換」したいと考えています。誰かがこれを手伝ってくれますか(すべての場所とグループの結果の月ごとに請求列を合計する必要があります):

SELECT
sum(case when Location="Location1" then Charge else 0 end) as Location1,
sum(case when Location="Location2" then Charge else 0 end) as Location2,
sum(case when Location="Location3" then Charge else 0 end) as Location3,
MAKEDATE(YEAR(OrderTime),DAYOFYEAR(OrderTime)) AS date FROM Sales
GROUP BY YEAR(OrderTime),MONTH(OrderTime)
ORDER BY OrderTime DESC 

?

出力は次のようになります。

Location1 | Location2 | Location3 | date

編集:

ここからLINQサンプルを使用しようとしました:

LINQ を使用してデータをピボットすることは可能ですか?

var query = context.log_sales
                            .GroupBy(c => c.OrderTime)
                            .Select(g => new
                            {
                                Date = g.Key,
                                Location1 = g.Where(c => c.Location == "Location1").Sum(c => c.Charge) ?? 0,
                                Location2 = g.Where(c => c.Location == "Location2").Sum(c => c.Charge) ?? 0
                            }).ToList();

それはほとんど私が必要とするものです。年ごとのグループ化も必要ですが、これを行う方法がわかりません。

4

2 に答える 2

6

これは役立つかもしれません。

context.log_sales
.GroupBy(s => new {Year = OrderTime.Year, Month = OrderTime.Month})
.Select
( g => new {
  Date = new DateTime(g.Key.Year, g.Key.Month, 1),
  Location1 = g.Where(s => s.Location == "Location1").Sum(s => s.Charge),
  Location2 = g.Where(s => s.Location == "Location2").Sum(s => s.Charge),
  Location3 = g.Where(s => s.Location == "Location3").Sum(s => s.Charge),
  }
)
.OrderBy(x => x.Date);
于 2008-10-08T18:03:46.517 に答える
0

.. 選択する場所を動的に追加する方法を知っていますか? たとえば、リスト/配列から。

編集: .. または、動的にロードする場所を作成し、Select の前に Where ステートメントでどの場所をロードするかを設定することもできます。これは可能ですか?

于 2008-10-09T08:43:27.177 に答える