代码:
public IEnumerable<CalendarItem> GetCalendarItems(DateTime? startDate = new DateTime?(), DateTime? endDate = new DateTime?())
{
if (startDate.HasValue && endDate.HasValue)
{
var items = session.Linq<CalendarItem>()
.Where(x => x.EventDate >= startDate.Value && x.EventDate <= endDate)
.ToList<CalendarItem>(); //Error Here
return items;
}
//var items = session.QueryOver().OrderBy(x => x.EventDate);
return session.CreateCriteria<CalendarItem>().List<CalendarItem>().OrderByDescending(x => x.EventDate);
}
异常的
Method not found: 'System.Collections.IDictionary NHibernate.ISessionFactory.GetAllClassMetadata()'.
参考问题?任何帮助,将不胜感激。
修改的
我尝试使用不可为空的日期时间,并给出了相同的错误。有人试图打电话:
System.Collections.IDictionary NHibernate.ISessionFactory.GetAllClassMetadata()
当我通过vs2010查看ISessionFactory
时,medadata不会显示“GetAllClassMetadata()”方法。
答案 0 :(得分:1)
可能linq提供程序不了解startDate.Value getter调用。尝试
.Where(x => x.EventDate >= startDate && x.EventDate <= endDate)
更新
答案 1 :(得分:0)
我最终剥离了我对fluent / nhibernate的引用。我使用nuget来获得流畅的包,但可能存在问题。我为了流利的nhibernate下载了最新的程序集,并删除了对我能找到的那些程序集的任何引用。这似乎解决了这个问题。
BTW ......我现在使用的是Query()而不是Linq()
答案 2 :(得分:0)
NHibernate Linq提供商有时候有点儿麻烦。在Linq查询中使用它们之前,尝试将方法参数存储到局部变量中。
public IEnumerable<CalendarItem> GetCalendarItems(DateTime? startDate = new DateTime?(), DateTime? endDate = new DateTime?())
{
if (startDate.HasValue && endDate.HasValue)
{
DateTime? start = startDate.Value;
DateTime? end = endDate.Value;
var items = session.Linq<CalendarItem>()
.Where(x => x.EventDate >= start && x.EventDate <= end)
.ToList<CalendarItem>();
return items;
}
...
}