2013-06-18 3 views
1

ASP.NET MVC3 응용 프로그램에서 작업하고 있습니다. 메서드에서 호출 한 곳에서 제공하는 ID를 가진 엔티티 만 반환하는 메서드를 내 서비스에서 만들고 싶습니다. DocumentService라고 내 서비스에서리포지토리 패턴을 사용하여 서비스에서 ID로 선택된 단일 엔터티를 반환합니다.

나는 다음과 같은 간단한 방법을 썼다 :

public Documents GetDocById(long id) 
{ 
    return DocumentsRepository.All().Where(d => d.Id == id); 
} 

나는 내가 엔티티의 유형으로 메서드의 반환 형식을 설정해야 결정 단일 엔티티를 원하기 때문에 Documents이라고합니다. 나는이 코드를 얻을 오류 :

Cannot implicitly convert type "System.Linq.IQueryable<DataAccess.Documents> to DataAccess.Documents.

을 그리고 그 논리입니다. 그러나 내가 그것을 내가 원하는 형식으로 변형시키기 위해 무엇을해야하는지 생각하면 나는 스스로를 의문시하고있다. 예를 들어, 메서드의 반환 형식을 List<Documents>으로 바꾼 다음 return 문 끝에 ToList()을 추가 할 수 있습니다. 하지만 나는리스트를 기대하지 않고있다. 레코드리스트가 아니라 하나의 레코드 만 기대하고있다.

그래서 거기에 방법이 있으며, 내가 지금 생각할 수있는 항목 하나가있는 목록 대신 하나의 항목 만 반환하려면 어떻게해야합니까?

답변

2
return DocumentsRepository.All().SingleOrDefault(d => d.Id == id); 

또는

return DocumentsRepository.All().FirstOrDefault(d => d.Id == id); 

같은 ID로 여러 개체가있는 경우

. 주어진 Id 아무 문서가없는 경우

return DocumentsRepository.All().Where(d => d.Id == id).FirstOrDefault(); 

null를 반환합니다

+0

'SingleOrDefault'는 엔티티에 대한 linq에는 사용할 수 없습니다. –

+0

@ KlausByskovPedersen 감사하지만 afaik 그것은 .net 4에서 지원됩니까? – daryal

+0

당신이 'Where'를 건너 뛰었던 유일한 사람이기 때문에 +1) – jgauffin

1

는이

public Documents GetDocById(long id) 
{ 
    return DocumentsRepository.All().FirstOrDefault(d => d.Id == id); 
} 
1

사용 FirstOrDefault이 필요합니다.

+0

고마워, 나는 그것에 대해 잊어 버렸다. 나는 그것을 사용할거야! – Leron

관련 문제