【问题标题】:nhibernate queryover.where errornhibernate queryover.where 错误
【发布时间】:2011-04-18 04:18:07
【问题描述】:

我最近开始玩 nhibernate,目前正在尝试实现一个通用函数,用于在数据库中搜索具有特定名称的条目:

    public T FindName<T>(string name) where T : class
    {
        T obj;
        using (ISession session = m_SessionFactory.OpenSession())
        {
            obj = session.QueryOver<T>()
                .Where(x => x.Name == name).SingleOrDefault();
        }
        return obj;
    }

问题是我收到了关于“.Where(x => x.Name == name)”语句的投诉:“Delegate 'System.Func' does not take 1 arguments”。从我在网上看到的情况来看,这种说法经常被使用,我不确定我做错了什么。

如果您有任何想法,请告诉我。

非常感谢。

【问题讨论】:

    标签: c# .net nhibernate lambda compiler-errors


    【解决方案1】:

    您需要确保可以在 T 类型的 x 上调用 Name。

    这可以通过使用属性名称、类型字符串和指定...的接口来实现。

    其中 T : 类,INameable

    这里有一些代码:

    interface INameable
    {
       string Name { get; }
    }
    
    class MyClass
    {
      ISessionFactory m_SessionFactory;
    
      public T FindName<T>(string name) where T : class, INameable
      {
         T obj;
         using (ISession session = m_SessionFactory.OpenSession())
         {
            obj = session.QueryOver<T>()
                .Where(x => x.Name == name).SingleOrDefault();
         }
         return obj;
      }
    

    【讨论】:

    • @Morris:我觉得这是错误的编译器错误消息的情况。在这种简单的情况下,它应该提供更好的指导。不过,它是泛型的泛型这一事实确实使编译器的事情变得有些复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多