2016-12-22 8 views
0

私は、個々の商品販売で構成された売上データテーブルを持っています。システム内で複数の行が1つの請求書(BillID)を構成しています。データは次のようになります。要件に基づくLINQグループ化

CompanyID | StoreID | BillItemID | BillID | DateKey |説明|売上高と税金などの他の列の束

本当に重要なのはBillIDなので、linq文のwhere節に含まれている両方の項目を含む請求書を探す必要があります。ここで

が私の現在のLINQ文の

FactSales 
    .Where(c => c.CompanyID == 433) 
    .Where(c => c.StoreID == 360) 
    .Where(c => c.Description == "2 Piece Combo" || c.Description=="3 Piece Combo") 
    .GroupBy(m => new { m.BillID }) 

はこれが2つのまたは3のいずれか一枚コンボたすべての売上を選択します。しかし、グループバイは、人々が同じ商品の倍数を購入する場所で、その両方の商品が売却された請求書を表すことがないため、必要な情報を提供しません。

これはlinqで可能ですか?

+2

質問は少し不明です。サンプルデータセットと出力を提供できますか? – BradleyDotNET

+0

BillIDに固有の番号はありますか?または、異なる店舗で複製されますか?一意であれば、なぜCompanyIDとStore IDでフィルタリングしていますか?特に、複数のCompanyID番号を持ち、課金部門を共有する企業もあります。 – jdweng

+0

BillIDsは一意ではありません。固有のものとしてstoreidとcompanyidが必要ですが、このクエリの場合、billIDは他の2つの要因が設定されているためユニークです – Nate58

答えて

2

私が正しく理解していれば、あなたはWhereから両方の項目が含まれているグループをフィルタします。

これを行う方法はいくつかあります。

... 
.Where(g => g.Select(c => c.Description).Distinct().Count() == 2) 

またはアイテム存在のグループ内容を確認(Whereフィルタ条件を複製):グループ内の個別のアイテムをカウント例えば

... 
.Where(g => g.Any(c => c.Description == "2 Piece Combo") && 
    g.Any(c => c.Description == "3 Piece Combo")) 
+0

を表示する質問が更新されました。それはイワンに感謝します。 – Nate58

0

売り上げ量を確認する「& &」という別の条件を追加するのはいかがですか?ORはまとめてグループ化されています。

FactSales 
.Where(c => c.CompanyID == 433) 
.Where(c => c.StoreID == 360) 
.Where(c => (c.Description == "2 Piece Combo" || c.Description=="3 Piece Combo") && c.purchaseQuantity > 1) 
.GroupBy(m => new { m.BillID }) 
関連する問題