Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ:QuerySyntaxException_Linq_Nhibernate_Linq To Nhibernate - Fatal编程技术网

LINQ:QuerySyntaxException

LINQ:QuerySyntaxException,linq,nhibernate,linq-to-nhibernate,Linq,Nhibernate,Linq To Nhibernate,我已经编写了一些复杂的LINQ查询,我正试图对NHibernate运行这些查询,不幸的是,在尝试计算查询时,这会导致异常(call.ToList()) 下面是代码,该代码用于检索带有一些额外数据的问题对象: var list = from i in sess.Query<Issue>() let readFlag = (from f in i.ReadFlags where (f.User != null &&

我已经编写了一些复杂的LINQ查询,我正试图对NHibernate运行这些查询,不幸的是,在尝试计算查询时,这会导致异常(call.ToList())

下面是代码,该代码用于检索带有一些额外数据的问题对象:

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
        };
var list=来自sess.Query()中的i
让readFlag=(从i.ReadFlags中的f开始)
其中(f.User!=null&&f.User.Username==request.Username)
||
(f.Device.Name==request.MachineName)
选择f).FirstOrDefault()
让isUnread=readFlag==null
let unreadCommentsCount=是否未读?0:(来自i.评论中的c)
其中c.DateCreated>readFlag.LastSeenCommentDate
选择c.Count()
让状态更改=未读(&i)状态!=readFlag.LastSeenStatus
其中未读| |未读注释>0 | |状态已更改
选择新的
{
问题=我,
ReadFlag=ReadFlag,
IsUnread=IsUnread,
unreadcommentscont=unreadcommentscont
};
i、 e.-对于每个问题对象,查找与当前用户名或计算机名匹配的相关IssueReadFlag。如果该标志存在,它还包含“最后一次看到的注释日期”,因此代码将计算此问题的新注释数

不幸的是,NHibernate无法处理此查询()

我正在寻找这个问题的最佳解决方案。

获取所有问题对象并在客户端应用查询条件对我来说是不可接受的


试图找出问题的原因:当我在“select”和“where”语句中注释掉对unreadCommentsCount和statusChanged的评估时,它开始工作。根据这一线索,似乎在这些子查询中引用readFlag会导致问题(在“let UnreadCommentScont..”和“let statusChanged..”条件中删除对readFlag的引用后,查询不会引发异常)。
现在我需要一个关于如何使它再次正常工作的提示…

进一步调查这个问题,我发现NHibernate无法处理readFlag存在的不确定状态

最后,我将查询分为两部分,第一部分处理readFlag不存在的所有问题,第二部分直接查询IssueReadFlag,计算未读注释计数和更改状态


这似乎是目前唯一的解决方案。

您是否考虑过从一个常规的
查询开始,并添加这些不同的检查项来缩小问题的范围?@Ocelot20同时尝试了这一点。请参阅问题的更新