Ошибка nhibernate queryover.where - PullRequest
       15

Ошибка nhibernate queryover.where

1 голос
/ 18 апреля 2011

Я недавно начал играть в 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)": "Делегат System.Func" не принимает 1 аргумент ". Из того, что я видел в Интернете, это утверждение используется довольно часто, и я не уверен, что я делаю неправильно.

Пожалуйста, дайте мне знать, если у вас есть идеи.

Большое спасибо.

1 Ответ

3 голосов
/ 18 апреля 2011

Вам нужно убедиться, что вы можете вызвать Имя на х типа T.

Этого можно достичь, создав интерфейс с именем свойства, типом строки и указав ...

где 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;
  }
...