我目前遇到使用nhibernate
从数据库获取记录的问题。
我的'publicstring'列有两个值,一个是小写,另一个是大写。 我试图根据键入的内容获取其中一个。
以下是我的查询
private string _publicId;
var _mediaFileShare = this.Session.QueryOver<MediaFileShare>()
.Where(q => q.Publicsting == _publicstring)
.SingleOrDefault();
答案将不胜感激..
答案 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();
使用订单的结果将取决于您的数据库及其整理设置。