经过数小时的谷歌搜索和 stackoverflow 搜索,我迫切需要您对 Linq 问题的帮助。
想象两个表:
表 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),则 Linq 查询将仅返回产品 1,因为它至少包含 1 和 3 FeatureID。
我发现类似于下面的 SQL 查询,但“IN”运算符(或 Linq 中的“包含”函数)返回包含 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)"