我想添加投影到NHibernate的LINQ查詢(通過.select()
),但由於我有一些邏輯我想使用助手類,而不是直接返回投影模型。使用幫助類NHibernate的LINQ投影
我的代碼看起來像這樣(縮短):
var query = Session.Query<MessageInstance>();
... (a few .Fetch and .ThenFetch calls)
var result = query.Where(specification.IsSatisfiedBy())
.OrderBy(m => m.CreationDate)
.Select(m => _messageModelHelper.BuildMessageModel(m));
_messageModelHelper
是一個對象,其將我MessageInstance
對象爲MessageModel
,它包含的邏輯來處理不同的情況,因爲這一切都取決於相關實體。
這種失敗,錯誤:
Field Dal.Repositories.MessageRepository._messageModelHelper' is not defined for type 'NHibernate.Linq.NhQueryable`1 [Domain.Entities.Message]'
如果我避免使用的字段(這是必要的DI),並且這樣做:
.Select(m => new MessageModelHelper().BuildMessageModel(m))
我只是得到一個System.NotSupportedException
。
看來我的方法不起作用。我可以做什麼,同時避免直接返回new MessageModel
?另外我真的需要保持投影,我不能操作一個枚舉。
好的,我應該更清楚一點,但我確實想繼續投影......我無法使用'AsEnumerable'的原因是我們有一個自定義擴展方法來檢索分頁集合。 – MarioDS
@MDeSchaepmeester然後首先你的頁面,然後從分頁的結果你做'_messageModelHelper.BuildMessageModel(m)',就像var result2 = result.Select(m => _messageModelHelper.BuildMessageModel(m))。ToArray(); – xanatos
@xantos:是的,但仍然沒有預測,我想保持這一性能優勢。 – MarioDS