가정하자이 같은 도메인 모델이 : 나는 뷰 모델은 일부 필드를 제외 할가장 좋은 방법은
public class Book
{
public int ID { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public DateTime PublicationDate { get; set; }
public DateTime EntryDate { get; set; }
public string EnteredBy { get; set; }
}
그러나, 다음과 같습니다 :
public class BookView
{
public int ID { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public DateTime PublicationDate { get; set; }
}
있다 데이터베이스에서 뷰 모델을 가져 오는 두 가지 방법. 첫 번째 방법은 이것이다 :
List<BookView> views = context.Books.Where(b=>b.Author=="Winston Churchill")
.Select(b=>new BookView() { ID=b.ID,Title=b.Title,Author=b.Author,PublicationDate=b.PublicationDate})
.ToList();
을하고, 두 번째 방법은 이것이다 :
var results = context.Books.Where(b => b.Author == "Winston Churchill");
List<BookView> views = new List<BookView>();
foreach(var b in results)
{
views.Add(new BookView() { ID = b.ID,Title = b.Title,Author = b.Author,PublicationDate = b.PublicationDate});
}
내 질문 성능 문제의 모든 차이는 무엇입니까? 후자는 더 많은 레이어 분리를 허용합니다. 예를 들어 Book
모델은 뷰 모델을 전혀 참조하지 않는 별도의 Data
어셈블리에있을 수 있습니다. 그러나 Select
절이 쿼리를보다 효율적으로 만드는 지 궁금합니다.
첫 번째 방법은 조건이 일치하지 않으면 예외를 throw합니다. 두 번째는 목록이 null인지 항상 확인할 수 있습니다. 성능은별로 중요하지 않습니다. 'foreach' 대신'for' 루프를 사용하는 것이 좋습니다. 대규모 컬렉션의 경우 조금 빠릅니다. –
@Cristian Szpisjak 어떤 예외가 발생합니까? 이 코드를 시도 할 때 예외가 발생하지 않습니다. – astidham2003
@Matthew 당신은 프로파일 링이나 어떤 유형의 성능 테스트를 해 보았습니까? 각각의 경우에 생성 된 SQL을 살펴 보았습니까? – astidham2003