Linq to nHibernate方法未找到

时间:2012-03-24 23:13:06

标签: c# nhibernate fluent-nhibernate linq-to-nhibernate

代码:

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()”方法。

3 个答案:

答案 0 :(得分:1)

可能linq提供程序不了解startDate.Value getter调用。尝试

.Where(x => x.EventDate >= startDate && x.EventDate <= endDate)

更新


BTW,您使用的是哪个版本的nhibernate?据我所知,.Linq已弃用,请改用.Query

答案 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; 
    }
    ...
}