[英]Dynamically add parameter to a 'IN' clause in a query?
我正在嘗試使用C#
查詢MS Access
數據庫
Static 查詢是——
Select FieldID , CDGroups.CDGroupID , Priority
from Fields , CDGroups
where Fields.CDGroupID = CDGroups.CDGroupID
and Fields.FieldID in ('f1','f2','f3')
order by Priority
我需要從包含所有這些字段的fieldIdList(List<string> fieldIdList)
替換 f1,f2.. FieldID
我怎么可以go一下呢?
正確的方法是使用 SQL 參數。
為此,您需要遍歷列表並為每個列表項創建一個參數 - 在 SQL 字符串和查詢的 SQL 參數列表中。
看看這個類似問題的答案:
如何將 sqlparameter 傳遞給 IN()?
var listId= string.Join(",", fieldIdList.Select(m => string.Format("'{0}'", m)));;
然后
"Field.FieldID in (" + listId+ ")
我使用了以下代碼:
StringBuilder sb = new StringBuilder();
foreach (string fieldId in fieldIdList)
{
sb.Append("'" + fieldId + "',");
}
string fieldList = sb.ToString().TrimEnd(',');
string queryString =
"Select FieldID , CDGroups.CDGroupID , Priority from Fields , CDGroups where Fields.CDGroupID = CDGroups.CDGroupID and Fields.FieldID in (" + fieldList + ") order by Priority";
試試這個查詢 -
SELECT CDGroupID FROM fields
WHERE FieldID IN ('f1', 'f2', 'f3')
GROUP BY CDGroupID
HAVING(COUNT(DISTINCT FieldID)) >= 3
它將顯示至少具有 'f1'、'f2' 和 'f3' 的 CDGroupID 列表。 如果您想顯示只有“f1”、“f2”和“f3”的那些,則將 WHERE 條件更改為“HAVING(COUNT(DISTINCT FieldID)) >= 3”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.