2014-08-30 2 views
3

Я хочу Concat ПгвЬЫате Employee и LastName в пункте выбора, но это дает:как Concat два столбца с Hibernate queryover с помощью LINQ

Не удалось определить элемент из нового <> f__AnonymousType0`1 (имя = Format ("{0} {1}", x.FirstName, x.LastName))

var returnData = UnitOfWork.CurrentSession.QueryOver<Employee>() 
       .OrderBy(x => x.Id).Asc 
       .SelectList(u => u.Select(x => x.Id).WithAlias(() => 
              businessSectorItem.id) 
            .Select(x => new { name = string.Format("{0} {1}", 
               x.FirstName, x.LastName) }) 
               .WithAlias(() => businessSectorItem.text)) 
            .Where(x => (x.FirstName.IsInsensitiveLike 
                ("%" + searchTerm + "%") || 
               x.LastName.IsInsensitiveLike 
                ("%" + searchTerm + "%")) && 
                (x.Account == null || x.Account.Id == 
                      accountId)) 
            .TransformUsing(Transformers 
                .AliasToBean<SearchEmployeeItemDto>()) 
            .Take(limit) 
            .List<SearchEmployeeItemDto>(); 
+0

'string.Format' имеет много различных вариантов, которые слишком сложны для большинства SQL двигателей для выполнения, попробуйте использовать «x.FirstName +» «+ x.LastName' – Matthew

+0

Я просто попробовал ваше предложение, но он по-прежнему дает ту же ошибку – semirturgay

+0

Также возможно, что механизм запросов не может понять анонимный тип' new {name = string. Формат ("{0} {1}", x.FirstName, x.LastName)} '. Я не знаком с fluent-nhibernate, но, возможно, вы можете напрямую использовать строку 'string.Format (" {0} {1} ", x.FirstName, x.LastName)'? Как это будет взаимодействовать со следующим «WithAlias», я не знаю, но, тем не менее, это справедливое предположение, чтобы проверить. –

ответ

5

синтаксис QueryOver будет выглядеть следующим образом:

// instead of this 
.Select(x => new { name = string.Format("{0} {1}", 
    x.FirstName, x.LastName) }) 
    .WithAlias(() => businessSectorItem.text))         

// we should use this 
.Select(
    Projections.SqlFunction("concat", 
     NHibernateUtil.String, 
     Projections.Property<Employee>(e => e.FirstName), 
     Projections.Constant(" "), 
     Projections.Property<Employee>(e => e.LastName) 
    )).WithAlias(() => businessSectorItem.text) 

Прибыль здесь от функции sql concat. Проезжаем Projections.SqlFunction в Select() заявление и построить часть, используя некоторые по умолчанию/базовый Projections

+0

Вы отлично :) Спасибо за внимание. – semirturgay

+0

NHibernate отлично! Наслаждайтесь этим;) –

+0

Сущность навсегда. :) босс заставил меня использовать NHibernate: / – semirturgay

4

Или теперь еще проще:

using NHibernate.Criterion; 

SelectList(l => l 
    .Select(x => Projections.Concat(m.FirstName, ", ", m.LastName)) 
    .WithAlias(() => businessSectorItem.text)) 
) 
Смежные вопросы