何時間にもわたってスタックオーバーフローをグーグルで検索した後、Linq の問題に関してあなたの助けがどうしても必要です。
次の 2 つのテーブルを想像してください。
表 A : 製品
ID(int) | ProductName(varchar(50))
1___________|_______________A
2___________|_______________B
3___________|_______________C
...
表 B : 製品の特徴
ProductID(int) | FeatureID(int) | FeatureValue(smallint)
1_____________________|_________1_____________________|____________1
1_____________________|_________2_____________________|____________1
1_____________________|_________3_____________________|____________0
2_____________________|_________1_____________________|____________0
2_____________________|_________2_____________________|____________1
3_____________________|_________1_____________________|____________1
3_____________________|_________2_____________________|____________1
...
例えば
FeatureID = 1 => "has WiFi"
FeatureValue 1 = Yes / 0 = No.
表 C:機能説明表もあります
FeatureID int,
FeatureName varchar(50)
私の ASP アプリケーションには、チェックボックスやドロップダウン リストなどのコントロールを含むパネルがあり、ユーザーは製品のリストをフィルター処理できます。
そのため、誰かが「ラップトップ」カテゴリを選択すると、ページにラップトップのリストが表示され、さらに結果を絞り込むために「WiFi あり」チェックボックスなどのフィルターをクリックできます。
私の問題:
最初に、フィルター コントロールは、要求された FeatureID を含むリストを作成します。
List<int> filters=getFilterPanelList();
製品の機能に少なくともフィルターリストが含まれる製品テーブルからすべての製品を選択するにはどうすればよいですか? (SQL または Linq スクリプト内)。
例: コントロールがリスト (1,3) を生成する場合、少なくとも 1 と 3 の FeatureID が含まれているため、Linq クエリは製品 1 のみを返します。
次の SQL クエリのようなものを見つけましたが、'IN' 演算子 (または Linq の 'Contains' 関数) は、FeatureID 1 または FeatureID 3 を含むが両方を含まないすべての製品を返します。
SELECT ProductID
FROM
Products P
JOIN ProductFeatures PF ON PF.ProductID = P.ID
WHERE
PF.ProductID IN
SELECT ProductID
FROM
ProductFeatures
WHERE
FeatureID IN @FilterList)"