当前位置: 首页 > 编程语言 > C#

《String.Contains方法只支持客户端可以求值的参数》share

时间:2023-04-10 22:22:29 C#

《String.Contains方法只支持客户端可以求值的参数》publicstaticvoidMyFunction(MyErrorClasserr){varquery=fromfilterinDataContext.ErrorFilters选择过滤器;query=query.Where(f=>err.ErrorMessage.Contains(f.ErrorMessage));列表过滤器=query.ToList();//...更多代码}所以我对上面的代码有一些问题,我从query.ToList()行的主题行中得到错误。这是我正在尝试做的事情:首先,我有一个自定义错误类MyErrorClass。每当我的网站出现错误时,我都会从异常中创建一个MyErrorClass对象,将异常中的所有数据存储在该对象中,并将信息存储在数据库中。我要跟踪的异常属性之一是错误消息(ErrorMessage)。我在数据库中建立了一个ErrorFilters表,用户可以根据ErrorMessage过滤错误。所以假设你收到大量错误提示“System.Data.SqlClient.SqlException:超时已过期。操作完成前超时时间已过,或者服务器没有响应。”,你想忽略它们。您只需将ErrorMessage为“超时已过期”的过滤器添加到数据库中,并将其设置为忽略。现在,我上面的类设置为错误并决定是否应该过滤错误。我正在尝试获取具有与错误匹配的ErrorMessage的所有过滤器的列表。我确信这是一个简单的解决方案,我只是不知道如何解决它。看来您应该使用f.ErrorMessage.Contains(err.ErrorMessage)-linqtosql然后将其转换为WHEREErrorFilter.ErrorMessageLIKE%err.ErrorMessage%。你的问题是生成的SQL需要一个动态字符串来匹配where子句,所以过滤只能在客户端完成。显然,行varquery=fromfilterinDataContext.ErrorFiltersselectfilter;没有必要,你可以这样做:varfilters=DataContext.ErrorFilters.Where(f=>f.ErrorMessage.Contains(err.ErrorMessage)).ToList();编辑:好的,我明白你现在想做什么,但我不确定在linq2sql中是否可行。您可以创建一个存储过程并将其添加到数据上下文,并将输出映射到一系列ErrorFilter对象:%'end然后在你的数据上下文中你可以:DataContext.GetMatchingFilters(err.ErrorMessage).Select(result=>newErrorFilter{...}).ToList();嗯...看起来Linq2SQLIndexOf翻译比Contains聪明。这应该有效:publicstaticvoidMyFunction(MyErrorClasserr){varquery=DataContext.ErrorFilters;query=query.Where(f=>err.ErrorMessage.IndexOf(f.ErrorMessage)>=0);列表过滤器=query.ToList();//...更多代码}在LinqPad中可以看出它使用了CHARINDEX,因为我们不仅要问“包含”,还要问“它在哪里”,但它很乐意使用服务器端表达式。以上就是C#学习教程分享的全部内容:《String.Contains方法只支持可以在客户端求值的参数》。网络收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: