查询未返回唯一结果:2。 Nhibernate查询问题

时间:2014-04-08 06:04:45

标签: sql c#-4.0 nhibernate

我目前遇到使用nhibernate从数据库获取记录的问题。

我的'publicstring'列有两个值,一个是小写,另一个是大写。 我试图根据键入的内容获取其中一个。

以下是我的查询

 private string _publicId;
 var _mediaFileShare = this.Session.QueryOver<MediaFileShare>()
                                   .Where(q => q.Publicsting == _publicstring)
                                   .SingleOrDefault();

答案将不胜感激..

1 个答案:

答案 0 :(得分:2)

一个天真的解决方案是:

var _mediaFileShare = this.Session.QueryOver<MediaFileShare>()
    .Where(q => q.PublicString == _publicString)
    .List()
    .SingleOrDefault(r => string.Compare(r.PublicString, _publicString, StringComparison.Ordinal) == 0);

如果您确信查询将始终返回两行,那么性能应该是非常可接受的。或者,您可以使用动态订单,例如:

    var query = this.Session.QueryOver<MediaFileShare>()
        .Where(q => q.PublicString == _publicString);

    query = _publicString == _publicString.ToLower() 
        ? query.OrderBy(q => q.PublicString) 
        : query.OrderByDescending(q => q.PublicString);

    var _mediaFileShare = query.Take(1).SingleOrDefault();

使用订单的结果将取决于您的数据库及其整理设置。