2014-09-26 6 views
1

При использовании TPH у меня есть разные типы, наследующие базу. У нас есть поиск, который запрашивает абстрактный тип. В результатах мы хотим показать тип:Запрос на включение значения дискриминатора при использовании TPH

ie. абстрактный автомобиль

Автомобиль: Автомобиль Грузовик: Автомобиль

в результатах, я хочу показать «тип» - то есть. «Автомобиль» и «Грузовик».

Я попытался использовать GetType(). Имя, но это не удается.

Вот пример:

IQueryable<CompanySearchResult> q = from company in _ctx.Companies 
               select new CompanySearchResult 
               {               
                CompanyName = company.CompanyName, 
                CompanyId = company.Id, 
                Type = company.GetType().Name 
               }; 
+1

Это не должно терпеть неудачу, и это правильный подход. –

+0

Как это происходит? –

+0

Это ошибка, которую я получаю: System.NotSupportedException: LINQ to Entities не распознает метод 'System.Type GetType()', и этот метод не может быть переведен в выражение хранилища. – Steve

ответ

1

Вы должны отложить проецирование до тех пор, пока есть объекты в памяти

IEnumerable<CompanySearchResult> q = 
    _ctx.Companies.ToList() 
     .Select(company => 
      new CompanySearchResult 
      {               
       CompanyName = company.CompanyName, 
       CompanyId = company.Id, 
       Type = company.GetType().Name 
      }); 

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

+0

Спасибо - это сработало для меня – Steve

+0

Теперь у меня есть вторичная проблема, когда я выполняю сортировку и подкачку по этому запросу, и я не могу сортировать по дискриминатору при выдаче запроса – Steve

+0

т.е. 'companySearch.sortBy = companySearch.sortBy ?? "Название компании"; запрос = query.OrderBy (companySearch.sortBy + (companySearch.sortDesc "нисходящий": "")) Пропусти ((companySearch.page - 1) * companySearch.pageSize) .Снять (companySearch.pageSize); – Steve