c# - LINQ to SQL 通配符

标签 c# linq-to-sql lambda wildcard

如何在我的 LINQ To SQL lambda 表达式中构建通配符?

这是我目前拥有的:

var query = from log in context.Logs select log;
foreach (string filter in CustomReport.ExtColsToFilter)
{
    string tempFilter = filter;
    query = query.Where(Log => Log.FormattedMessage.Contains(tempFilter));
}

在我尝试在过滤器字符串中传递通配符之前,这一切正常。我正在试验 SqlMethods.Like()但无济于事。

上面的过滤器看起来像这样:"<key>NID</key><value>mcass</value>" .

我希望能够通过这样的过滤器:"<key>NID</key><value>%m%</value>"

最佳答案

String.Contains 实际上是作为 LINQ to SQL 中的 LIKE 表达式实现的,因此这些查询是等价的:

query = query.Where(Log => Log.FormattedMessage.Contains("m"));
query = query.Where(Log => SqlMethods.Like(Log.FormattedMessage, "%m%"));

但是,使用 SqlMethods.Like,您可以指定更复杂的模式,例如 "%m%a%"。对我来说很好用。从 visual studio 内部看不出真正的区别,因为要匹配的表达式放在 T-SQL 的参数中。

如果您要在分析器中记录 SQL 查询,它将看起来像这样:

exec sp_executesql N'SELECT [t0].[ID], [t0].[FormattedMessage]
FROM [dbo].[Log] AS [t0]
WHERE [t0].[FormattedMessage] LIKE @p0',N'@p0 nvarchar(5)',@p0=N'%m%a%'

与问题本身无关,但 String.StartsWithString.EndsWidth 也转换为 SQL LIKE,略有不同当然是模式。

关于c# - LINQ to SQL 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000153/

相关文章:

python - 从字符串序列创建 Python lambda 函数

JavaScript 加载 MVC ASP .NET MVC

c# - 如何结束响应并发回 HTTP 代码 404?

c# - Linq-To-Sql 将字符串转换为具有特定格式的日期

linq-to-sql - Linq 到 Sql : Select distinct rows while ignoring specified columns

c# - 如何使用 LTS 获取表中未使用的 ID block ?

c# - mvc4 lambda : Add separate query to object model?

c# - 字符串、对象和整数之间的转换和解析

c# - 如何在 .NET 中引发事件查看器 "Event"?

java - AWS Lambda 函数内存大小是可变的还是常量?