라고 :"새로운"은 내가 간단한 Linq2Sql 쿼리를하면
var result = from t in MyContext.MyItems
select new MyViewModelClass()
{
FirstProperty = t,
SecondProperty = new SomeLinq2SqlEntity()
}
문제는 new SomeLinq2SqlEntity()
가에, 순서에 대해 한 번만 MyViewModelClass
그렇게 모든 인스턴스를 실행하는 것 같다 것입니다 쿼리의 결과는 하나의 객체에 대한 링크를 공유합니다.
업데이트 : 여기 내가 빨리 확인하는 방법입니다
result[0].SecondProperty.MyField = 10;
사용 디버거 나는 MyField
이 모든 경우에 10
로 설정되어 있음을 확인할 수 있습니다. 내가 foreach 문에 LINQ 쿼리를 교체 할 때
, 그것은 예상대로 작동 : 나는 문제의 근본을 발견하지 않은,하지만 asnwer 좋은 해결 방법을 제공하기 때문에 포스트가 표시
var result = from t in MyContext.MyItems select t;
var list = new List<MyViewModelClass>();
foreach (var item in result)
{
list.add(new MyViewModelClass()
{
FirstProperty = item,
SecondProperty = new SomeLinq2SqlEntity()
});
}
. 자세한 설명은 다음을 참조하십시오. "new" inside concrete type projection is only called once
당신이 그것을 인스턴스화 한 번만 실행됩니다 _seems_ 말한다. 이걸 어떻게 확인 했니? 하나의 속성을 변경하여 모든 투영 된 객체에 반영된 값을 보려고 했습니까? 아니면 하나의 객체 만 나중에 영구적으로 유지 되었기 때문에 그럴 수 있습니다. –
"업데이트"섹션에 빠른 테스트를 추가했습니다. – artvolk
이것은 linq에서 sql과 관련이 있습니다. linq에서 linq로 완전히 비슷한 예제가 있습니다. var v = "abc".Select (C => new ObjectContainer() {o = new SomeClass()}); 'SomeClass' 매개 변수가 예상 된 ** 3 ** 번 호출됩니다 – AakashM