C LINQクエリです:自分のIDがいくつかの値に等しい項目のリストを取得する - ここで#
from order in db.tblCustomerBuys
where selectedProducts.Contains(order.ProductID)
select order.CustomerID;
selectedProducts
することは、たとえば、それは{ 1, 2, 3}
で、一部の対象製品IDを含むリストです。 上記のクエリは、selectedProducts
のいずれかを購入した顧客IDを返します。たとえば、誰かが製品1または2を購入した場合、そのIDが結果になります。
しかし、私はすべての製品を購入した顧客IDを収集する必要があります。たとえば、誰かが製品1と2と3を購入した場合、それは結果になります。
このクエリの編集方法は?
tblCustomerBuysはこのようなものです。このような
CustomerID - ID of Customer
ProductID - the product which the customer has bought
何か:更新
CustomerID ProdcutID
---------------------------
110 1
110 2
112 3
112 3
115 5
:原因私はこのタイプを使用すべきいくつかの理由で、私はグループ化を行う必要があります答え、へ
クエリの:
var ID = from order in db.tblCustomerBuys
group order by order.CustomerID into g
where (selectedProducts.All(selProdID => g.Select(order => order.ProductID).Contains(selProdID)))
select g.Key;
しかし、それはこのエラーを与えるでしょう: Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.
私はあなたがする必要があると思いますあなたのデータベースの構造も追加してください。 OrderとProductはどのように接続されていますか? –
'tblCustomerBuys'の1つのエントリで、複数の製品の購入がどのように見えますか?これまでのところ、1つのフィールド 'ProductID'だけが表示されていますが、これは1つの値しか持たないことを前提としています。または私は間違っています –
@MongZhu:これは、顧客と(購入した)prodcutsの関係テーブルです。したがって、「CustomerID」を繰り返すことは、この顧客が複数の商品を購入したことを意味します。 –