【问题标题】:Advance search in LINQLINQ 中的高级搜索
【发布时间】:2016-03-20 00:21:34
【问题描述】:

如何在 LINQ 中进行搜索,如下所述? 我想在我的文本框中输入一个像“a%b%c%d%”这样的字符串,并希望我们在 SQL 中得到结果。

Select * 
from TableName 
Where ColumnName Like 'a%b%c%d%'

【问题讨论】:

  • Linq-To-Sql 或 Linq-To-Entities。
  • @TimBourguignon:虽然接受的答案没有帮助。但是这个问题的答案取决于架构,在 Linq-To-Sql 中,您可以使用SqlMethods.Like。我不知道它在 LInq-To-Entities 中是如何工作的。我猜你需要this approach
  • 我也使用 Like 操作符,但它不起作用。
  • @Roberto 这是一个有效的 SQL 查询。你可以检查一下。

标签: sql linq


【解决方案1】:

LINQ没有like运算符,所以你可以先检查它是否包含a、b、c和d,然后检查a是否在开始,b是否在c之前,c是否在d之前。像这样:

from item in context.TableName
where item.ColumnName.StartsWith("a") && item.ColumnName.IndexOf("b") != -1
&& item.ColumnName.IndexOf("c") != -1 && item.ColumnName.IndexOf("d") != -1
&& (
    item.ColumnName.IndexOf("b") < item.ColumnName.IndexOf("c")
    && item.ColumnName.IndexOf("c") < item.ColumnName.IndexOf("d")
   )   
select item;

【讨论】:

  • 谢谢@Roberto。我们怎样才能使它通用??
【解决方案2】:
FROM item in context.TableName
WHERE item.ColumnName.StartWith("a%") 
   OR item.ColumnName.StartWith("b%") 
   OR item.ColumnName.StartWith("c%") 
   OR item.ColumnName.StartWith("d%")   
SELECT item;

【讨论】:

  • 这和OP的sql不一样。您检查它是否以 a 或 b 或 c 或 d 开头。 OP 只想要列以 a 开头的行,然后是任意的,然后是 b,然后是任意的,然后是 c,然后是任意的,然后是 d,然后是任意的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 2018-07-13
相关资源
最近更新 更多