簡體   English   中英

將參數動態添加到查詢中的“IN”子句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM