在 NHibernate QueryOver 中使用 IsLike

Using IsLike in NHibernate QueryOver

我知道它已经为这个错误提供了一些解决方案,但我不知道为什么会出现这个错误。当我在没有过滤的情况下加载列表时它起作用了。

if (searchString != "") {
            query = _pagedDataQueryProcessor.GetDefaultQuery<Data.Entities.Password>()
                .Where(
                Restrictions.Disjunction()
                    .Add(Restrictions.On<Data.Entities.Password>(x => x.Name).IsLike(searchString))
                    .Add(Restrictions.On<Data.Entities.Password>(x => x.Description).IsLike(searchString))
                    .Add(Restrictions.On<Data.Entities.Password>(x => x.PasswordText).IsLike(searchString))
   );
}

我发现了问题所在

解法:

if (searchString != "") {
            query = _pagedDataQueryProcessor.GetDefaultQuery<Data.Entities.Password>()
                .Where(
                Restrictions.Disjunction()
                    .Add(Restrictions.On<Data.Entities.Password>(x => x.Name).IsLike("%" + searchString + "%"))
                    .Add(Restrictions.On<Data.Entities.Password>(x => x.Description).IsLike("%" + searchString + "%"))
                    .Add(Restrictions.On<Data.Entities.Password>(x => x.PasswordText).IsLike("%" + searchString + "%"))
);

我改变了什么?我没有“%”。

这里我想过滤一个列表,但是当我在输入中写一些东西时,我总是得到一个空列表。

searchstring 是过滤后的词

data.entities.password 是 db

上的列表

谁能帮帮我,我不知道我做错了什么。

您需要添加通配符或向 IsLike 添加第二个参数。

...IsLike("%" + searchString + "%"))

您可以将通配符放在字符串的任何位置,例如仅在开头或仅在结尾。

...IsLike(searchString, MatchMode.Anywhere)

您也可以使用 MatchMode.StartMatchMode.End