Dan*_* T. 14 linq nhibernate linq-to-nhibernate
我有一个实体及其映射:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试对它运行查询(将其从数据库中取出):
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
Run Code Online (Sandbox Code Playgroud)
但是,每当我运行此查询时,我都会收到以下异常:
Index was out of range. Must be non-negative and less than the size of the
collection. Parameter name: index
Run Code Online (Sandbox Code Playgroud)
我是说对了,目前,Linq对NHibernate不支持ToLower()?如果是这样,是否有一个替代方案允许我在Linq到NHibernate兼容的另一个字符串的中间搜索一个字符串?例如,如果用户搜索kap,我需要它来搭配Kapiolani,Makapuu和Lapkap.
Die*_*hon 11
围绕这个问题似乎有很多混乱.
Contains并在SQL中StartsWith映射到LIKE运算符.它们本身并不区分大小写; 这是使它们不区分大小写的排序规则,因此这取决于您的列/模式的创建方式.更新(2010-04-09):确认错误并提交补丁,请参阅https://nhibernate.jira.com/browse/NH-2169
更新(2010-05-21):补丁已应用于2010-05-01,现在按预期工作.
ddc*_*660 10
我最近发生了这件事.我可以告诉你,ToLower()不起作用,并且Contains()和StartsWith()确实有效并且不区分大小写.您可以直接使用Contains()和StartsWith()来获得所需的效果.
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |