私は3列のリストビューコントロールを持っています:linq to sql、集計列、日付順のリストビュー
年| NetTotal | GrossTotal
また、私はいくつかの列を持つ注文と呼ばれるテーブルを持っています、彼らは注文に関する情報を含み、彼らが所属する顧客のIDを格納します。
質問:どのようにLinq(datacontextはLinqToSqlからのものです)を使ってそのテーブルをクエリして、次のデータを返すことができますか?
CustomerIDが一致するエントリを検索し、年単位でグループ化し、合計を合計してリストビューに追加したいとしますか?私は今、私はどのように、ラムダ式や集計を使用してだけでは明らかではない可能性があり(DBはDataContextのオブジェクトであり、オプションがオン推測、得意先がint32型変数である)
:
Dim Orders = (From order In db.Orders Where order.CustomerID = CustomerID).GroupBy(Function(p) p.Date.Year).GetEnumerator
私は私が持っているだろう数えます次のように匿名型を作成するには:
Dim tmpYears = From prevs In db.Orders Select New With {.CustID = prevs.CustomerID, .Year = prevs.PaymentDate.Year, .NetPurchase, .GrossPurchase}
をしかし、どのように、私は、グループ内の購入の列を集計していますか?
Dim CustomerOrders = From ord In db.Orders Where Ord.CustomerID = custID Select ord
Dim tot = From O in CustomerOrders Select Aggregate netTot In O Into Sum(netTot.Price * netTot.Quantity * 1+ (netTot.Discount/100))
私は2つをマージしたい。
提案がありますか? (私はthisを読んだことがありますが、私はLinqでチームプロジェクトを作っていましたので、LinqToSQLソリューションをdb.Alsoに送信する代わりにLinqを使用することに同意しました。それ)
感謝、感謝、私もonelinersが好き;) – Qqbt
私は大ファンでも、ワンライナーが悪いニュースであることを知っています。あなたの質問へのトリックは 'GroupBy'の過負荷でしたが、おそらくあなたはそれを今目にしたでしょう。私は 'resultSelector'を持っているオーバーロードを使用しています。これは、1つのライナーになると、すべてのオプションの中から私が好きなものです。 :-) – Smudge202
あなたは正しいですし、これの最良の部分(ほとんどのlinqクエリのように)は結果が列挙可能です....人生はITの土地で素晴らしい...時には素晴らしい答えに感謝します – Qqbt