4

注文ヘッダーと詳細テーブルがあり、すべてのヘッダー列を取得して、詳細から合計注文数量を追加します。

私がやろうとしていること(pseudo-sql):

select Header.*, sum(Details.Quantity)
from Header
join Details on Details.HeaderID = Header.ID
group by HeaderID

すべてのヘッダー列(たくさんあります)を書き直さないようにするために、次のような新しいオブジェクトを作成しました。

public class OrderView 
{
    public Header Header { get; set; }
    public int? TotalQuantity { get; set; }
}

そしてそれを埋めるための私の悲しい試み:

var results = from oh in db.Header
              join od in db.Details on oh.ID equals od.HeaderID                          
              where oh.Store == params.Store
                 // && ...  a bunch more search filters on Header ...
              group od by od.PID into odg
              select new OrderView() { Header = oh, TotalQuantity = odg.Sum(x => x.QTY) };

私の現在の試みの最初の問題は、select行にohが定義されていないことです。これは、LINQを知らないため、ヘッダーからのすべての結果が別の場所に送信されたと私に信じさせます。

このタイプのクエリのベストプラクティスが検索に表示されない場合は、このクエリ全体を破棄して別の方法で実行しても問題ありません。

4

1 に答える 1

4

このようなことを意味しますか?私、「私がやろうとしていること」の pesudo-sql から本当に (= ) であると想定od.PIDod.HeaderIDています。oh.IDoh.IDdb.Header

var results = from oh in db.Header
              join od in db.Details on oh.ID equals od.HeaderID                          
              where oh.Store == params.Store
                 // && ...  a bunch more search filters on Header ...
              group od by oh into odg
              select new OrderView() 
              {
                  Header = odg.Key, 
                  TotalQuantity = odg.Sum(x => x.QTY) 
              };
于 2012-07-12T17:04:54.983 に答える