我有这样的陈述:
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
方法得到整行,并用以下消息加下划线:
string
不包含Contains
的定义,最佳扩展方法重载System.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource, System.Collections.Generic.IEqualityComparer<TSource>)
包含一些无效参数
我做错了什么?
答案 0 :(得分:16)
尝试IndexOf
:
searchString.IndexOf(saup.FriendlyName,
StringComparison.InvariantCultureIgnoreCase) != -1
它不起作用的原因是因为接受Contains
的{{1}}扩展方法正在IEqualityComparer<TSource>
上运行,String
实现IEnumerable<char>
,而不是{{1}因此无法将IEnumerable<string>
和string
传递给它。
答案 1 :(得分:3)
即使有Contains(source, item, comparer)方法,你也不能将它与NHibernate一起使用,因为比较器是代码,而不是NH可以翻译的表达式树。
*:即使您为比较器编写了一个LINQ提供程序扩展,即特殊情况生成,但情况并非如此。
答案 2 :(得分:2)
您使用的.Contains来自LINQ - 它将字符串视为IEnumerable<char>
,因此它需要IEqualityComparer<char>
。 StringComparer
比较器实现了IEqualityComparer<String>
。
如果minitech的IndexOf
方法有效,我认为这将是最简单的方法。
答案 3 :(得分:-2)
将以下命名空间添加到您的班级
using System.Linq;
希望它有所帮助。