‘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
它不起作用的原因是因为接受IEqualityComparer
的Contains
扩展方法在String
上运行,该String
实现IEnumerable
,而不是IEnumerable
,所以string
和IEqualityComparer
可以’传递给它。
即使有一个Contains(source,item,comparer)方法,你也不能将它与NHibernate一起使用,因为比较器是代码,而不是NH可以翻译的表达式树。
*:也就是说,除非您为比较器编写了一个LINQ提供程序扩展,即特殊情况生成,但事实并非如此。
您使用的.Contains来自LINQ – 它将String视为IEnumerable
,因此它需要IEqualityComparer
。 StringComparer
比较器实现IEqualityComparer
。
如果minitech的IndexOf
方法有效,我认为这将是最简单的方法。
将以下命名空间添加到您的类中
using System.Linq;
希望能帮助到你。