2012-12-04 4 views
3

dbcontext.set에 select 절을 사용할 수 있습니까? db 테이블에서 People의 모든 공동 보험금을 반환하고 모든 열을 선택하는 다음 코드를 작성했습니다.dbcontext에서 엔터티 프레임 워크 선택 절

public IQueryable<Person> GetPeople() 
{ 
    return DbContext.Set<Person>();     
} 

나는 단지 모두 당신의 예에서 사용자 이름과 이메일

답변

8
var projection = GetPeople().Select(p => new {p.Username, p.Email}); 
+0

감사 메이트. 트릭 작성 –

2

을 선택합니다, 제이슨의 예는, 당신은 상황 인식 개체를 전달하고 있다는 사실을 알고 있어야합니다. 데이터를 추가로 조작하면 데이터베이스에 예상치 못한 히트가 발생할 수 있습니다. 또한 DbContext.Set()과 같은 함수를 수행 할 때 EF에서 가장 느린 형식의 데이터베이스 호출을 수행합니다. 가장 빠르고 가장 효과적인 데이터베이스 호출은 다음과 같습니다.

public List<GetPersonResult> GetPeople() 
{ 
     return (from p in dbContext.People 
       select new GetPersonResult 
       { 
        UserName = p.Username, 
        EmailAddress = p.Email 
       }).ToList(); 
} 

public class GetPersonResult 
{ 
     public string UserName{get;set;} 
     public string EmailAddress{get;set;} 
} 

원시 SQL은 EF 사용 중 가장 빠른 형식입니다. 거의 원시 ADO.NET만큼 빠릅니다.

+2

'context.People'은'context.Set ()'과 어떻게 다른가요? 'context.People'은'Set ()'을 캡슐화하는 속성입니다. 다소 효과적이지 않습니다. linq 구문이 linq 확장자보다 sql에 더 가깝다는 것을 의미한다면, 당신은 착각합니다. linq 구문은 linq 확장 메소드에 대한 구문 - 설탕입니다. –

0
여기

:

public IQueryable<Person> GetPeople() 
{ 
    return DbContext.Set<Person>().Select(per => new {per.UserName, per.Email})     
} 

당신은, resaults를 필터링 예를 들어 약간의 과부하를 추가 할 :

public IQueryable<Person> GetPeople() 
{ 
    return DbContext.Set<Person>().Select(per => new {per.UserName, per.Email})     
} 

public IQueryable<Person> GetPeople(int cityId) 
{ 
    return DbContext.Set<Person>().Where(p => p.CityID == cityId) 
       .Select(per => new {per.UserName, per.Email})     
}