我正在使用nHibernate来搜索不匹配的字符串。
模型是这样的:
PlayerGroup
有一个字段ExpectedPlaylistKey
Player
有一个字段LastReportedPlaylistKey
。
一个PlayerGroup
有很多Players
。
我想执行查询以查找与该组的预期播放列表不匹配的所有播放器。
我的代码如下:
PlayerGroup playerGroupAlias = null;
Player playerAlias = null;
var query = this.Session.QueryOver<Player>(() => playerAlias)
.JoinAlias(() => playerAlias.PlayerGroup, () => playerGroupAlias)
.Where(
() => (playerGroupAlias.ExpectedPlaylistKey != playerAlias.CurrentlyReportedPlaylistKey)
);
我检查了生成的SQL,并使用了这个where子句:
WHERE not (playergrou1_.ExpectedPlaylistKey = this_.CurrentlyReportedPlaylistKey)
不幸的是,如果其中一个值为NULL,则返回false,即使其他值不为null。
如何修复我的nHibernate查询,以便在任一字符串为NULL时处理大小写?
答案 0 :(得分:0)
我提出了一个有效的答案。
但是,考虑到问题的简单性,这看起来真的很笨拙。
var query = this.Session.QueryOver<Player>(() => playerAlias)
.JoinAlias(() => playerAlias.PlayerGroup, () => playerGroupAlias)
.Where(
() => (
(playerAlias.CurrentlyReportedPlaylistKey == null)
&&
(playerGroupAlias.ExpectedPlaylistKey != null)
)
||
(
(playerAlias.CurrentlyReportedPlaylistKey != null)
&&
(playerGroupAlias.ExpectedPlaylistKey == null)
)
||
(
playerGroupAlias.ExpectedPlaylistKey != playerAlias.CurrentlyReportedPlaylistKey
)
);
正如你所看到的,我使用了一个由五个比较组成的lambda表达式以及另外五个布尔运算,所有这些都是为了问“这两个字符串是否不同”?
我希望有一个更优雅的解决方案。