过滤可空字符串的比较

时间:2011-10-18 04:25:19

标签: nhibernate queryover

我正在使用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时处理大小写?

1 个答案:

答案 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表达式以及另外五个布尔运算,所有这些都是为了问“这两个字符串是否不同”?

我希望有一个更优雅的解决方案。