C# 奇怪的LINQ到SQL行为

C# 奇怪的LINQ到SQL行为,c#,linq-to-sql,lambda,C#,Linq To Sql,Lambda,这是我的数据集: 1 David 2 David 3 Marc 4 Marc 5 Marc 6 Marc 7 Marc 8 Marc 9 Marc 10 Marc 11 Marc 12 Marc 13 Marc 14 Marc 15 Marc 此查询返回2条记录(正确): query=query.Where(Log=>SqlMethods.Like (Log.FormattedMessage,“%NameDavid%”); 此查询返回2条记录(正确): query=query.Where(L

这是我的数据集:

1 David
2 David
3 Marc
4 Marc
5 Marc
6 Marc
7 Marc
8 Marc
9 Marc
10 Marc
11 Marc
12 Marc
13 Marc
14 Marc
15 Marc
此查询返回2条记录(正确):

query=query.Where(Log=>SqlMethods.Like
(Log.FormattedMessage,“%NameDavid%”);
此查询返回2条记录(正确):

query=query.Where(Log=>SqlMethods.Like
(Log.FormattedMessage,“%Name%David%%”);
此查询返回0条记录(正确):

query=query.Where(Log=>SqlMethods.Like
(Log.FormattedMessage,“%Nameav%”);
此查询返回2条记录(正确):

query=query.Where(Log=>SqlMethods.Like
(Log.FormattedMessage,“%Name%av%%”);
此查询返回0条记录(正确):

query=query.Where(Log=>SqlMethods.Like
(Log.FormattedMessage,“%Namev%”);
此查询返回15条记录(不正确,应返回2条):

query=query.Where(Log=>SqlMethods.Like
(Log.FormattedMessage,“%Name%v%%”);

最后一个查询有什么问题?这是一个bug还是我遗漏了什么?

我能看到的唯一原因是,
%v%
作为过滤器,这意味着在regex(+)v(+)中,基本上是任何在其中某处带有v的值。如果这不是解决方案,您可以发布查询结果吗?

%Name%v%%
"%<key>Name</key><value>%v%</value>%"
键/值之前/之后是什么?例如,我可以想象这与它相匹配:

NameStanvvalue>Kyle


我很感谢你的反馈,但你并不是针对整个过滤器。它不仅仅是“%v%”,它的“%Name%v%%”。此外,只有两条记录中有一个“v”。如果我们知道您试图匹配的数据,这将非常有用。这一点很好!我想你可能发现了什么!现在使用您的数据示例和我的查询结构,您将如何查询“tan”以使其返回该记录?@mcass:我不确定您要问什么-如果您要问如何使用类似的查询解析XML。实际上,您要做的是在代码中解析XML,并以存储数据的方式(使用行/列)将数据存储在数据库中。如果您真的必须尝试在SQL中解析XML,SQL Server有一些,尽管无法从L2S间接访问它。这正是我要做的。当我们试图将一堆XML填充到SQL字段中时,我们给自己挖了一个大洞。这是我们对EntLib Logging应用程序块的“FormattedMessage”字段的解决方案。要把数据拿回来,这真让人头疼!谢谢你为我节省了时间和痛苦的尝试。
    query = query.Where(Log => SqlMethods.Like
(Log.FormattedMessage, "%<key>Name</key><value>%David%</value>%"));
    query = query.Where(Log => SqlMethods.Like
(Log.FormattedMessage, "%<key>Name</key><value>av</value>%"));
    query = query.Where(Log => SqlMethods.Like
(Log.FormattedMessage, "%<key>Name</key><value>%av%</value>%"));
    query = query.Where(Log => SqlMethods.Like
(Log.FormattedMessage, "%<key>Name</key><value>v</value>%"));
    query = query.Where(Log => SqlMethods.Like
(Log.FormattedMessage, "%<key>Name</key><value>%v%</value>%"));
"%<key>Name</key><value>%v%</value>%"