2013-08-08 6 views
1

이 코드는 런타임 오류가 발생 구조체에 대한 매개 변수가없는 생성자가 없기 때문에Linq2Entities 쿼리에서 구조체를 반환 할 수 있습니까?

struct MyStruct { 
    public int ID; 
    public string Desc; 
} 
... 
var q = db.MyTable.Select(t => new MyStruct { ID = t.ID, Desc = t.Desc }); 

오류가 발생합니다. 하지만 명시적인 생성자를 사용할 수는 없습니다. SQL 변환이 없기 때문입니다.

첫 번째 질문은 컴파일 타임 오류가 발생하지 않는 이유입니다. 컴파일러는 MyStruct이 구조체이며이 존재하지 않는 매개 변수가없는 생성자에서 개체 이니셜 라이저를 사용할 수 없다는 것을 알고 있습니다.

하지만 더 중요한 질문은 Linq2Entities의 알려진 제한 사항이며 구조체가 아닌 클래스를 사용해야한다는 것입니다.

+0

귀하의 구조체는 암시 적/기본 매개 변수가없는 생성자를 가지고처럼 보이는, 왜 이러한 예외가 발생 될 수 있을까? –

답변

6

1) 컴파일러는 LINQ To Entities가 무엇인지 알지 못합니다.

2) Yes, it is known.

A는하지만 수정 :

var q = db.MyTable 
    //do your processing here (Where, Any, Join, whatever) 
    .ToList() //or AsEnumerable or ToArray 
    .Select(t => new MyStruct { ID = t.ID, Desc = t.Desc }); 
관련 문제