nHibernate Выберите оператор для определенных полей - PullRequest
1 голос
/ 17 сентября 2010

Я использую nHibernate с c #, чтобы получить список записей или строк из базы данных, как показано в первой паре строк кода ниже. Это отлично работает. Что я хочу сделать, это выбрать несколько конкретных полей из записи, а не всю запись. Я пробовал различные методы и не могу найти примеры того, как это сделать. Может ли кто-нибудь взглянуть на приведенный ниже код и сообщить мне, если я ухожу в неправильном направлении.

Спасибо!

//  THIS WORKS - Retrieve a list of my records from the table.
Ilist<MyClass> classList = db.Session.CreateQuery("FROM MyTable WHERE t.Name='AName'").List<MyClass>();


//  THIS WORKS - Retrieve a list of strings from the table
IList<string> stringList = db.Session.CreateQuery("SELECT c.ConstName FROM MyTable c WHERE c.Name='AName'").List<string>();


//  THIS DOES NOT WORK (RUN-TIME ERRORS).  HOW CAN I SELECT ONLY A FEW FIELDS FROM EACH RECORD?
//  This class contains only the records I want.
public struct MyClassB
{
    private string Name;
    private string Address;

    public string Name
    {
        get { return Name; }
        set { Name = value; }
    }

    public string Address
    {
        get { return Address; }
        set { stationName = Address; }
    }
}      


IList<MyClassB> classListB = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List<MyClassB>();

Ответы [ 3 ]

2 голосов
/ 17 сентября 2010

Посмотрите на AliasToBeanResultTransformer - использование продемонстрировано здесь .

0 голосов
/ 06 июня 2011

Пока у вашего класса есть конструктор, вы сможете делать следующее:

IList<MyClassB> classListB = db.Session.CreateQuery("SELECT new MyClassB(t.Name, t.Address) FROM MyTable t WHERE t.Name='AName'").List<MyClassB>();
0 голосов
/ 17 сентября 2010

Вы пытаетесь преобразовать анонимный тип в MyClassB, который недопустим.Вместо этого создайте отображение для MyClassB.

Или просто используйте:

var specificFields = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List();

var specificFields = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List<Tuple<string,string>>();

Объекты в списке будут иметь два свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...