2012-02-15 2 views
0

은 내가 EntityObject 목록에 데이터베이스 레코드를 retrievs 데이터 액세스 개체가 개체 이 List<EntityObject>을 통해 Product 개체의 목록으로 enumarate해야합니다. 난 쉽게 이런 식으로 다시 변환 할 수 있습니다내 DAL에서

var pList = Data.Entities.Select(p => p as Product); 

는 그러나 이것은 큰 컬렉션에 문제가 될 것이 컬렉션에 대 한 내 메모리 풋 프린트를 배가 List<EntityObject>의 복사본을 생성하지 않는 이유는 무엇입니까?

만약 그렇다면이 List<EntityObject>을 으로 다시 변환하지 않고 List<Product>으로 변환하고 해당 복사본을 열거하는 대신 enumarete 방법이 있습니까?

+0

당신이 설명 할 수 '대신에? 그것은 훨씬 간단한 솔루션처럼 보입니다. 현재 List :: EntityObject를 수락하고있는 곳이면 어디에서나 T : EntityObject라는 List를 받아들이는 것이 종종 문제가되지 않습니다. – hvd

+0

이 "일반"목록에는 여러 가지 EF 개체를 저장할 수 있으므로이 방법을 사용하면 수십 개의 서로 다른 특정 EF 개체에 대한 수십 개의 목록 대신 기본 목록에서 하나의 목록 만 처리 할 수 ​​있습니다. –

+0

첫 번째 'pList'와 두 번째 관계가 무엇인지 이해하십시오. 'Data.Entities' 란 무엇입니까? 엔티티와 같은가요? – svick

답변

2

하지만이 큰 컬렉션에 문제가 될 것이 컬렉션에 대 한 내 메모리 풋 프린트를 두 배로 목록의 복사본을 생성하지 않는 이유는 무엇입니까? 그 더 우려해야하므로

아니, 이것은 단지, 엔티티에 참조의 사본을 만들 것입니다.

var pList = Data.Entities.OfType<Product>().ToList(); 

아니면 그냥 직접 제품을 통해 열거 할 수 있습니다 : : 또한

캐스트를 할 수있는 안전한 방법이 될 것입니다 당신이 '목록을 생성하지 않는 이유

foreach(var product in Data.Entities.OfType<Product>()) 
{ 
    //.. 
} 
+0

그의 코드에서 ToList()를 호출하지 않으므로 참조 사본을 만들지 않습니다. – svick

+0

예, 그 경우가 좋겠지 만 확인하고 싶습니다. OfType 은 @svick 및 귀하의 +1에 대한 더 나은 솔루션이므로 +1 대신 OfType을 사용하는 것이 좋습니다. –

+0

@svick : yes - OP가 목록에 대해 말하고 있었기 때문에 자신의 코드 예제에서 그 목록이 표시되지 않더라도 다른 목록을 만들 겠다는 의도를 가졌습니다. – BrokenGlass

2

아니, 당신은 메모리 사용량에 대해 걱정할 필요가 없습니다, 다른 List을 만들지 않습니다 (ToList() 또는 new List() 그것을 따르지 않고) 단지 Select()를 호출. 그것은 당신이 제공 한 람다를 사용하여 Products의 시퀀스를 계산한다는 것입니다. 람다에 복잡한 연산이 포함되어 있고 결과를 여러 번 반복하면 성능 문제가 발생할 수 있지만 여기서는 그렇지 않습니다.

이 같은 캐스트를 표현하는 데 사용할 수있는 두 가지 다른 방법이 있지만, 목록 Product의없는 개체를 포함 할 때 어떤 일이 약간의 차이가 있습니다

  • Select(p => p as Product)을 : 당신이하고있는 일 지금 사용하고 있습니다. 시퀀스에 Product이 아닌 객체가 포함되어 있으면 null으로 바뀝니다.
  • OfType<Product>() : Products은 걸러집니다.
  • Cast<Product>() : 시퀀스에 Product이 포함되어 있으면 예외가 발생합니다. 이것은 아마도 원하는 버전 일 것입니다.
+0

추가 정보 주셔서 감사합니다,하지만 그것은 매우 유용합니다 List 다른 제품 다음 제품을 포함 할 수 없습니다 (그리고 심지어 경우, 나는 그들을이 특정 경우에 필터링 할 싶습니다) 그래서 캐스트 정말 원하는 것입니다. , OfType 은 ... –

관련 문제