linq语法以匹配动态sqlIN语句
本文关键字:动态 sqlIN 语句 语法 linq | 更新日期: 2023-09-27 18:23:35
有人知道如何用ID的字符串表示来实现这一点吗?为了寻找答案,我尝试了上面的方法,但都不适用于我的样式格式化。我有一个字符串"1,2,3,4,5",它代表我正在寻找的ID。。。但是该字符串不会被识别为SQL语法中常见的IN语句的独立ID。。。
string IDs = "1,2,3,4,5";
var recs = from tb1 in c2d where new[]{IDs}.Contains(tb1.RID) select tb1;
我知道我的字符串在sql语法中工作,如下所示。。。
string sSql = "select * from table where IDs in ("+ IDs + ")";
exec sql;
我只是在寻找一些类似的东西来保持我的synatrx快速和肮脏的
您需要将该字符串数据放入int
数组中,并使用Contains()
查询:
int[] ids = new [] {1,2,3,4,5};
var recs = from tb1 in c2d where ids.Contains(tb1.RID) select tb1;
如果需要使用字符串,则必须将其拆分为一个数组,并将字符串值强制转换为int
,然后才能使用它。
string IDs = "1,2,3,4,5";
var recs = from tb1 in c2d
where IDs.Split(',')
.Select(x => int.Parse(x))
.Contains(tb1.RID)
select tb1;
如果您可以直接使用int数组而不是字符串,则最好使用
将字符串拆分为其组件,然后可以使用Contains
:
var validIds = IDs.Split(',').Select(int.Parse).ToList();
var recs = c2d.Where(tb1 => validIds.Contains(tb1.RID));
(我假设RID
是int
属性…)
最好将您的ID定义为用于O(1)查找的哈希集:
string IDs = "1,2,3,4,5";
HashSet<string> set = new HashSet<string>(IDs.Split(','));
var recs = from tb1 in c2d where set.Contains(tb1.RID) select tb1;
或者如果RID
是int
:
string IDs = "1,2,3,4,5";
HashSet<int> set = new HashSet<int>(IDs.Split(',').Select(int.Parse).ToArray());
var recs = from tb1 in c2d where set.Contains(tb1.RID) select tb1;