gpt4 book ai didi

c# - 添加包含字符串 Contains 测试的 Linq Where 子句的问题

转载 作者:行者123 更新时间:2023-11-30 22:21:38 26 4
gpt4 key购买 nike

好吧,这种行为真的让我很困惑。我有一个 IQueryable 列表,我试图添加 Where 子句来检查字符串字段是否包含子字符串。当我像这样硬编码搜索字符串时:

sourceList = sourceList.Where(license => license.FileNumber.Contains("S0"))

它按预期工作并通过在 Visual Studio 调试器中检查 sourceList 生成内部查询:

{SELECT [Extent1].[id] AS [id], [Extent1].[FileNumber] AS [FileNumber],
[Extent1].[LegalLocation] AS [LegalLocation]FROM [dbo].[Licenses]
AS [Extent1]WHERE [Extent1].[FileNumber] LIKE N'%S0%'}

当我从变量中设置搜索值时会发生奇怪的事情:

string testString = "S0";
sourceList = sourceList.Where(license => license.FileNumber.Contains(testString))

这会生成内部查询:

{SELECT [Extent1].[id] AS [id], [Extent1].[FileNumber] AS [FileNumber],
[Extent1].[LegalLocation] AS [LegalLocation]FROM [dbo].[Licenses]
AS [Extent1]WHERE [Extent1].[FileNumber] LIKE @p__linq__0 ESCAPE N'~'}

注意到末尾 LIKE 部分的区别了吗?我真的很困惑。任何帮助将不胜感激。希望这真的很愚蠢。如果它有任何相关性,这是为了过滤来自 Entity Framework 源的数据。

谢谢,杰森

最佳答案

如果您观察实际查询,您会看到 @p__linq__0 实际上被分配了 S0 值,然后传递给查询。

@p__linq__0 = '%S0%';
... WHERE [Extent1].[FileNumber] LIKE @p__linq__0 ESCAPE N'~'

基本上是这样的:

... WHERE [Extent1].[FileNumber] LIKE N'%S0%' ESCAPE N'~'

因为它是一个参数,LINQ 只是采取了预防措施并添加了 ESCAPE 子句。它也是一个变量而不是硬编码常量,并且 LINQ 语句中的任何更改值都作为参数传递而不是直接插入到查询中。

引用:LIKE (Transact-SQL)

关于c# - 添加包含字符串 Contains 测试的 Linq Where 子句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com