2013-04-10 2 views
14

나는 것 같은 쿼리이 하나오류 만드는 LINQ 쿼리

struct MyStruct 
{ 
    public string name; 
    public double amount; 
} 

var a = 
    from p in Products 
    select new MyStruct 
    { 
    name = p.Name, 
    amount = p.Amount 
    }; 

나는 다음과 같은 예외가 얻을 쿼리를 실행하면 :

System.NotSupportedException { "만 매개 변수가없는 생성자를 LINQ to Entities에서 이니셜 라이저가 지원됩니다. "}

그러나 MyStruct 유형을 클래스 다음 예상대로 작동합니다.

클래스와 일치하는 이유는이고 구조체는으로 실패합니까?

답변

3

LinqToObjects와 함께 작동합니다. LinqToEntities 구조체를 만드는 방법을 모르겠습니다 추측하고있어. 이렇게하면 당신은 괜찮을거야 :

struct MyStruct 
{ 
    public string name; 
    public double amount; 
} 

var a = Products.AsEnumerable() 
    .Select(p => new MyStruct 
    { 
     name = p.Name, 
     amount = p.Amount 
    }; 
+1

그러나 쿼리를 지정한 필드로 제한하지 않습니다. 이것은 선택 시작을 수행하는 주요 요점 중 하나입니다. – Servy

+0

DB에서 불필요한 데이터를 가져 오지 않는다면 익명의 클래스를 만들 수 있습니다. 나는 왜 그가 구조체를 사용하는지 이해하지 못합니다. – Shlomo

+0

그는 왜 '왜'에 관심이 있고 '어떻게 수정해야합니까'라고 생각합니다. – Shlomo

-1

이 시도 :

struct MyStruct 
{ 
      public string name; 
      public double amount; 
} 

Products[] p1 = new Products[] { new Products { name = "prod1", amount = 5 } 
var c = from p in p1 
     select new MyStruct { name = p.name, amount = p.amount }; 
+0

그는 Linq 개체에, 그는 쿼리 공급자를 사용하고, 이 문제를 해석하는 데 문제가있는 것은 쿼리 제공 업체입니다. – Servy

2

Linq에 엔티티 구조체에 투사 지원하지 않습니다. 이들은이를 쿼리 공급자에 대한 지원을 디자인 할 필요가 있었으며 단순히 선택하지 않아도됩니다. 개발 비용의 상당 부분을 지원할만큼 가치있는 기능으로 보지 못했던 것으로 보입니다.

쿼리에 클래스 인스턴스가 새로 투영되어야합니다.

+0

> 엔티티에 대한 Linq는 구조체로 투영하는 것을 지원하지 않습니다 <어떻게 결론에 도달 했습니까? 어딘가 읽었 니? 나는 당신의 지식에 의문을 제기하지 않고 있습니다. 당신이 그것을 발견하기 위해 어떤 메커니즘을 사용했는지 알고 싶습니다. 그래서 앞으로도 똑같이 할 수 있습니다. – vcRobe