Получение отдельной колонки из объекта

Как вы можете получить один столбец из запроса вместо целого объекта?

Я мог бы сделать что-то подобное, чтобы получить весь объект, но все, что я хочу, это имена:

IList<Tribble> tribbles = session.CreateCriteria(typeof(Tribble)).List<Tribble>();
IList<string> names = new List<string>();
foreach (Tribble t in tribbles) {
    names.Add(t.Name);
}

Я хотел бы указать дополнительные критерии, так можно ли просто исключить некоторые столбцы из списка?

Ответы

Ответ 1

Вот решение, которое я в конечном итоге закончил, используя:

ICriteria c = session.CreateCriteria(typeof(Tribble));
c.SetProjection(Projections.ProjectionList().Add(Projections.Property("Name")));
IList<string> names = c.List<string>();

Я получил эту идею из fooobar.com/questions/266399/....

Ответ 2

Почти пять лет спустя..., это то, что вы могли бы сделать, используя NHibernate.Linq:

IList<string> names = session.Query<Tribble>().Select(t => t.Name).ToList()

Ответ 3

Как насчет выполнения запроса по строкам?

IList<string> names = session.CreateQuery("select name from Tribbles").List<string>();

Ответ 4

Вы можете сделать что-то вроде этого:

IQuery query = dao.GetQuery(@"SELECT u.Id
                                FROM UserImpl u
                               WHERE u.UserName = :username");
               query.SetParameter("username", username);
return (long)query.UniqueResult();

Ответ 5

Обычно нет. Редко имеет смысл иметь частично заполненный бизнес-объект.

Зачем вам это нужно?