如何在 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
实际上是作为一个LIKE
LINQ to SQL 中的表达式,因此这些查询是等效的:
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.StartsWith
and String.EndsWidth
也翻译成SQLLIKE
,当然模式略有不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)