我寫了一些複雜的LINQ查詢,我試圖對NHibernate運行,不幸的是,當試圖評估查詢(調用.ToList())時會導致異常。LINQ:QuerySyntaxException
下面是代碼,這是應該用一些額外的數據檢索發行對象:
var list = from i in sess.Query<Issue>()
let readFlag = (from f in i.ReadFlags
where (f.User != null && f.User.Username == request.UserName)
||
(f.Device.Name == request.MachineName)
select f).FirstOrDefault()
let isUnread = readFlag == null
let unreadCommentsCount = isUnread ? 0 : (from c in i.Comments
where c.DateCreated > readFlag.LastSeenCommentDate
select c).Count()
let statusChanged = isUnread && i.Status != readFlag.LastSeenStatus
where isUnread || unreadCommentsCount > 0 || statusChanged
select new
{
Issue = i,
ReadFlag = readFlag,
IsUnread = isUnread,
UnreadCommentsCount = unreadCommentsCount
};
即 - 每個發行對象查找與IssueReadFlag它匹配當前用戶名或計算機名。如果標記存在,它也包含「上次看到的評論日期」,因此代碼將計算此問題的新評論數。
不幸的是NHibernate不能處理這個查詢(Exception details)。
我正在尋找針對此問題的最佳解決方案。
獲取所有Issue對象並在客戶端應用查詢條件對我來說是不可接受的。
試圖找出是什麼原因導致的問題:它開始工作,因爲我已經在這兩個「選擇」和「地方」的語句註釋掉unreadCommentsCount和statusChanged的評價。在這之後,似乎在任何這些子查詢中引用readFlag都會導致此問題(在刪除對「let unreadCommentsCount ..」和「let statusChanged ..」條件中的readFlag的引用後,查詢不會引發異常)。 現在我需要提示如何使其功能(按預期工作)...
您是否考慮通過從一般'Query'開始縮小問題範圍,並在這些問題中添加這些不同的檢查? –
Ocelot20
@ Ocelot20在此期間嘗試了此操作。看到問題的更新 – migajek