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快速和肮脏的

linq语法以匹配动态sqlIN语句

您需要将该字符串数据放入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));

(我假设RIDint属性…)

最好将您的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;

或者如果RIDint:

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;