[英]'string' does not contain a definition for 'Contains'
我有这样的声明:
var vals =
from StandAloneUserPayment saup in _Session.Query<StandAloneUserPayment>()
.Fetch(x => x.RecurringPayments)
where
saup.User.UserId == userId
&& searchString.Contains(saup.FriendlyName, StringComparer.InvariantCultureIgnoreCase)
select
saup;
这似乎正是我应该执行的操作,但是通过Contains
以下消息的下划线的Contains
方法得到了整行:
string
不包含Contains
的定义,并且最佳扩展方法重载System.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource, System.Collections.Generic.IEqualityComparer<TSource>)
论点
我究竟做错了什么?
尝试IndexOf
:
searchString.IndexOf(saup.FriendlyName,
StringComparison.InvariantCultureIgnoreCase) != -1
之所以不起作用,是因为接受IEqualityComparer<TSource>
的Contains
扩展方法是在String
上操作的,该方法实现IEnumerable<char>
,而不是IEnumerable<string>
,因此string
和IEqualityComparer<string>
可以实现不会被传递给它。
即使有一个Contains(source,item,比较器)方法,您也不能*将它与NHibernate一起使用,因为比较器是代码,而不是NH可以翻译的表达式树。
*:也就是说,除非您编写一个为比较器生成特殊情况的LINQ提供程序扩展,否则并非如此。
您正在使用的.Contains来自LINQ-它将字符串视为IEnumerable<char>
,因此它需要IEqualityComparer<char>
。 StringComparer
比较器实现IEqualityComparer<String>
。
如果minitech的IndexOf
方法有效,我认为这将是最简单的方法。
将以下名称空间添加到您的类中,
using System.Linq;
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.