‘string’不包含’Contains’的定义

我有这样的声明:

var vals = from StandAloneUserPayment saup in _Session.Query() .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(System.Linq.ParallelQuery, TSource, System.Collections.Generic.IEqualityComparer)有一些无效参数

我究竟做错了什么?

试试IndexOf

 searchString.IndexOf(saup.FriendlyName, StringComparison.InvariantCultureIgnoreCase) != -1 

它不起作用的原因是因为接受IEqualityComparerContains扩展方法在String上运行,该String实现IEnumerable ,而不是IEnumerable ,所以stringIEqualityComparer可以’传递给它。

即使有一个Contains(source,item,comparer)方法,你也不能将它与NHibernate一起使用,因为比较器是代码,而不是NH可以翻译的表达式树。

*:也就是说,除非您为比较器编写了一个LINQ提供程序扩展,即特殊情况生成,但事实并非如此。

您使用的.Contains来自LINQ – 它将String视为IEnumerable ,因此它需要IEqualityComparerStringComparer比较器实现IEqualityComparer

如果minitech的IndexOf方法有效,我认为这将是最简单的方法。

将以下命名空间添加到您的类中

 using System.Linq; 

希望能帮助到你。