LINQ 返回字符串字段中与字符串列表中的任何项类似的所有项
本文关键字:字符串 列表 返回 字段 LINQ 任何项 | 更新日期: 2023-09-27 18:33:06
我有一个SQL表,用于存储我网站上的所有查询。 数据库未规范化,站点的目标根据要访问的国家/地区的 ID 存储为逗号分隔变量。
我使用 LINQ 获取了被视为"接近"的所有国家/地区 ID 的列表。然后,我想在 linq 中使用它来获取 CSV 包含任何这些国家 ID 的所有查询。
因此,例如,我的国家/地区可能存储为列表6 | 20 | 24
我想返回 CSV 值中包含任何这些值的所有查询。 因此,如果 CSV 值'18,54,23,27,6'
则它将返回该查询。我的主要问题是因为此值作为字符串存储在表中,因此任何查找该字符串一部分的比较都是不可用的。如果直接是 SQL,我会键入 where Destinations like('%6%')
.对列表中的每个示例重复此操作。
我已经试过了,但它不起作用。
-
Dim count As Integer = ctx.tbl_Enquiries.Where(Function(f) f.Destinations.Contains(shorthaulIds.Any())).Count
我试过这个,但它与整个目标 CSV 进行比较,而不是在字符串中查找字符串。 -
我尝试将 csv 即时转换为列表,这显然不起作用,因为 linq 中的字符串函数往往不起作用。 - 如果你对此感兴趣,那么
Dim count As Integer = ctx.tbl_Enquiries.SelectMany(Function(f) f.Destinations.Split(",").Where(Function(fe) fe.Split("c").Contains(shorthaulIds.Any()))).Count
我也尝试了一些交叉点,但由于我以前没有使用过它们,所以我不确定我在做什么。
对于 C# 用户
-
int count = ctx.tbl_Enquiries.Where(f => f.Destinations.Contains(shorthaulIds.Any())).Count
代码
shorthaulIds.Any()
如果shorthaulIds
计数为一个或多个,则返回 true
,否则为 false。
所以代码
f.Destinations.Contains(shorthaulIds.Any())
如果询问目标容器是否包含true
.我敢肯定这不是你想要的。
试试这个:
int count = ctx.tbl_Enquries
.Where(f => f
.Destinations
.Any(d => shortHaulIds.Contains(d))
)
.Count();
感谢您的帮助。当我使用 LinqToSQL 时,我无法在我的主查询中使用包含。所以经过一番失误,我让它工作了。
对于那些感兴趣的人:
我将所有相应的查询目的地作为字符串列表,将其从 linqtosql 的上下文中取出。 然后在下一个查询上做了一个包含。 道具到@IsThatSo
Dim allFrench As List(Of String) = ctx.tbl_Enquiries.Where(Function(f) f.Subjects = (",30") Or f.Subjects = (",60")).Select(Function(s) s.Destinations).ToList()
Dim count As Integer = allFrench.Where(Function(f) shorthaulIds.Any(Function(s) f.Contains(s))).Count()