我有一个实体,它的映射:NHibernate LINQ支持Where()子句中的ToLower()吗?
public class Test
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
public class TestMap : EntityMap<Test>
{
public TestMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Description);
}
}
我试图在其上运行一个查询(抓住它从数据库中):
var keyword = "test" // this is coming in from the user
keyword = keyword.ToLower(); // convert it to all lower-case
var results = session.Linq<Test>
.Where(x => x.Name.ToLower().Contains(keyword));
results.Count(); // execute the query
但是,每当我运行这个查询时,我得到以下异常:
Index was out of range. Must be non-negative and less than the size of the
collection. Parameter name: index
我说得对不对,当我说的是,目前,LINQ到NHibernate的不支持ToLower()
?如果是这样,是否有一种替代方法可以让我在Linq和NHibernate兼容的另一个字符串中搜索字符串?例如,如果用户搜索kap
,我需要它匹配Kapiolani
,Makapuu
和Lapkap
。
为什么你认为问题在于调用ToLower() - 它是一个在String类上定义的标准方法,应该和NHibernate的LINQ无关。源代码中的哪一行会得到异常? – Slavo 2010-04-08 07:55:58
在'results.Count()'上,因为那是它的评估时间。并且它对于使用NHibernate的Linq很有帮助,因为它需要将它转换为SQL。 – 2010-04-08 08:08:58
该Linq提供程序是相当古老,并没有更新一段时间。它可能工作,但你也可能想尝试在NHibernate中继中更新的Linq提供程序。 – 2010-04-08 09:22:12