2013-07-16 3 views
1

У меня есть проект, который имеет два классаCounting дочерних объектов с условием

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

Mapper.CreateMap().ForMember(covm => covm.InsuredCount, co => co.MapFrom(x => x.Personnel.Count(y => y.InsuredStatus != InsuredStatus.NotCovered))) 

public class Company : BusinessUnit 
{ 
public DateTime RegisterDate { get; set; } 
public string RegisterPlace { get; set; } 
public virtual ICollection Personnel { get; set; } 
} 

Это сработало!

Но когда я проверить его с miniprofiler он выполняет запрос для каждого Компания персонала

Я просто хочу PersonnelCount с условием, и я хочу EXEC это с помощью одного запроса

Пожалуйста, предложите мне, как я могу сделать что

ответ

0

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

Edit (с комментариями):

Или, как отображение вы пытаетесь выполнить на IQueryable, попробуйте использовать Project().To<> из Queryable Extensions.

Project().To имеет ограничения, поэтому, если это не сработает для вас, следующая вещь заключается в том, чтобы материализовать запрос, как вы показываете в своем комментарии, а не использовать AutoMapper. Если это так (вы нажимаете ограничение в Project().To), пожалуйста, сообщите об ошибке файла, чтобы его можно было улучшить.

+0

но все же у меня есть два запроса, один запрос для компании и другой для персонала, я хочу только один запрос – Pooria

+0

Вы используете EF? если это так, так оно и работает, если использовать ленивую загрузку. –

+0

если я пишу этот код, как вар companydetail = от й в context.Companies выбрать новый CompanyViewModel { RegisterDate = s.RegisterDate, \t \t \t \t RegisterPlace = s.RegisterPlace, \t \t \t \t InsuredCount = s.Personnel .count (x => x.InsuredStatus! = InsuredStatus.NotCovered) }; он будет отлично разбираться с 1 запросом – Pooria

Смежные вопросы