gpt4 book ai didi

linq - NHibernate LINQ 在 Where() 子句中支持 ToLower() 吗?

转载 作者:行者123 更新时间:2023-12-03 21:35:01 25 4
gpt4 key购买 nike

我有一个实体及其映射:

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 to NHibernate 不支持 ToLower() ?如果是这样,是否有替代方法允许我在 Linq to NHibernate 兼容的另一个字符串中间搜索一个字符串?例如,如果用户搜索 kap , 我需要它来匹配 Kapiolani , Makapuu , 和 Lapkap .

最佳答案

围绕这个主题似乎有很多困惑。

  • “旧的”Linq 提供程序(用于 NHibernate 2.x)可能不支持这一点。如果是这种情况,它永远不会,因为它不再被维护。
  • 新的提供程序(包含在 NHibernate 3.x 中) 支持它(虽然 ToUpper 和 ToLower 好像倒过来了,见 http://groups.google.com/group/nhibernate-development/browse_thread/thread/a167216e466b3241 )
  • ContainsStartsWith映射到 LIKE SQL 中的运算符。他们是 不是 不区分大小写;排序规则使它们不区分大小写,因此这取决于您的列/架构的创建方式。

  • 更新 (2010-04-09):确认错误并提交补丁,见 https://nhibernate.jira.com/browse/NH-2169

    更新 (2010-05-21):补丁已于 2010-05-01 应用,现在按预期工作。

    关于linq - NHibernate LINQ 在 Where() 子句中支持 ToLower() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598202/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com