有没有办法可以针对具有指向ArrayList或List的where子句的数据源(可能是sql,oracle或access)创建查询?
例:
Select * from Table where RecordID in (RecordIDList)
我已经看到了一些方法可以用Linq做到这一点,但如果它可以避免,我宁愿不诉诸它.
你可以用String.Join
.尝试这样的事情:
String query = "select * from table where RecordId in ({0});"; String formatted = String.Format(query, String.Join(",", list.ToArray()));
作为旁注,这不会保护您免受SQL注入 - 希望此示例将指向正确的方向.
Linq到Sql.RecordList应该是a List
,而不是an ArrayList
或anIList
IEnumerablequery = from t in db.Table where RecordList.Any(r => t.RecordId == r) select t;
这将生成带参数的sql:
SELECT * FROM Table WHERE RecordId in (@p0, @p1, @p2, @p3, @p4)
Linq将生成所需数量的参数.某些数据库实现受限于可以接受的参数数量.SqlServer2005的限制是超过2000个参数...所以不要使用超过2000个元素的列表.
我只是用逗号分隔的列表做了你想做的事情
Select * from Table where RecordID in (1,2,34,45,76,34,457,34)
或者结果来自单独的选择
Select * from Table where RecordID in (select recordId from otherTable where afieldtype=1)
我很确定你无法实现你所追求的目标....