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

LINQ 返回字符串字段中与字符串列表中的任何项类似的所有项

代码

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()