【发布时间】:2017-01-11 14:44:52
【问题描述】:
我正在尝试使用 LINQ-to-SQL 实现以下算法:
给定一个字符串列表 L,返回 DB 中的每一行 R,其中 L 中的每个字符串都是 R 中列值之一的子字符串。
问题是我如何为 L 中的每个字符串迭代地执行此操作?我不知道如何巧妙地将其全部放入一个 Linq-To-SQL 语句中。请注意,我可以按照以下方式编写代码:
field1.contains(...) || field2.contains(...) || ...
因为没有那么多列。
例如,如果输入是
[“查理”、“医生”、“科尔”]
我们将输出所有包含“Charlie”作为子字符串的字段、“Doctor”作为子字符串的字段和“Kor”作为子字符串的字段的所有行。
我想到的一种方法是对每个输入值进行单独的 SQL 查询并取所有这些值的交集。
另一种方法是仅从输入中选择一个字符串,对其进行 SQL 查询,将其转换为列表,然后仅使用 C# 中的 LINQ 一次过滤掉其余字符串。
有什么想法可以做到这一点的最佳方式吗?
【问题讨论】:
-
为什么不做一个查询,把东西放在哪里? .Where(r => r.MyField.Contains("Doctor") || r.MyField.Contains("Charlie") || ...)
-
我认为他的意思是,他不想手动检查每一列。他正在寻找一种检查所有列的方法。不过,您对个人的建议是正确的。它会起作用的。
-
问题不是手动检查每一列,我很高兴这样做,因为有 O(1) 列。但是,如果我的输入是一个大批?这在语法上会是什么样子?
-
请将您最后的评论纳入问题,因为现在的方式不清楚您在问什么。
-
我已经更新了问题。
标签: c# sql linq linq-to-sql