2014-05-23 3 views
0

나는이 작업을 어떻게 수행 할 수 있을지 모르겠다. 여러 가지 방법을 시도했으며 모두 한 가지 오류 또는 다른 오류를 생각해 냈습니다. 대신에 오류를 범하지 않은 몇 가지 방법을 사용하면 찾고 있던 결과를 제공하지 못했습니다.JSON.NET LINQ to Entities 오류

내가 최종 결과에서 무엇을 찾고

{ 
    'type': 'NamedAA', 
    'id': '63c0f27a-716e-804c-6873-cd99b945b63f', 
    'x': 80, 
    'y': 59, 
    'width': 99, 
    'height': 107, 
    'userData': { 

    }, 
    'cssClass': 'DBTable', 
    'bgColor': '#DBDDDE', 
    'color': '#D7D7D7', 
    'stroke': 1, 
    'alpha': 1, 
    'radius': 3, 
    'name': 'DuringHoursAutoAttendant', 
    'entities': [ 
     { 
      'text': 'id', 
      'id': '49be7d78-4dcf-38ab-3733-b4108701f1' 
     }, 
     { 
      'text': 'employee_fk', 
      'id': '49be7d78-4dcf-38ab-3733-b4108701fce4' 
     } 
    ] 
} 

나에게주고 코드는 오류의

var aahope=new JObject(
    new JProperty("type", "NamedAA"), 
    new JProperty("id",aaid), 
    new JProperty("x",80), 
    new JProperty("y",59), 
    new JProperty("width",99), 
    new JProperty("height",107), 
    new JProperty("userData",new JObject()), 
    new JProperty("cssClass", "DBTable"), 
    new JProperty("bgColor", "#DBDDDE"), 
    new JProperty("color", "#D7D7D7"), 
    new JProperty("stroke",1), 
    new JProperty("alpha",1), 
    new JProperty("radius",3), 
    new JProperty("name",""), 
    new JProperty("entities", new JArray(
     (from e in db.HostedVoiceAAKeys 
     where e.HostedVoiceAAID == aaid.HostedVoiceAAID 
     select new JObject(
        new JProperty("id",e.OptionKey), 
        new JProperty("text",e.OptionGuid))).ToArray() 
     )) 
    ); 

오류 메시지 :

만 매개 변수가없는 생성자와 초기화가 LINQ to Entities에서 지원됩니다.

설명 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.NotSupportedException : LINQ to Entities에서 매개 변수가없는 생성자 및 초기화 프로그램 만 지원됩니다.

Source Error: 

Line 2763:   var aaresults = ""; 
Line 2764:   var aahope=new JObject(
Line 2765:    new JProperty("type", "NamedAA"), 
Line 2766:    new JProperty("id",aaid), 

답변

3

하는 jobject/JProperty 클래스를 처리 할 필요가 없습니다. 그냥 당신이 매개 변수로 생성자를 사용 Select()의 내부 개체를 인스턴스화 할 수 없습니다 개체 다음 직렬화 이러한 클래스

public class Entity 
{ 
    public string text { get; set; } 
    public string id { get; set; } 
} 

public class RootObject 
{ 
    public string type { get; set; } 
    public string id { get; set; } 
    public int x { get; set; } 
    public int y { get; set; } 
    public int width { get; set; } 
    public int height { get; set; } 
    public UserData userData { get; set; } 
    public string cssClass { get; set; } 
    public string bgColor { get; set; } 
    public string color { get; set; } 
    public int stroke { get; set; } 
    public int alpha { get; set; } 
    public int radius { get; set; } 
    public string name { get; set; } 
    public List<Entity> entities { get; set; } 
} 

에서 엔티티에

string json = JsonConvert.SerializeObject(rootObj); 
+0

Constract 객체가 변태적인 것 같습니다. ;) – paqogomez

+0

그래서 클래스를 이미 만들었지 만 그들과 관련된 문제는 엔티티가 RootObject에 포함되도록하는 것입니다. 이것은 하나의 RootObject를 여러 데이터베이스에 쿼리하는 것입니다. 귀하의 제안은 여기에 있지만 위대한 소리 그것은 실제로 데이터를 당겨 실종입니다 – scripter78

+0

그래서 결국이 밖으로 테스트에서 나를 막을 다른 문제를 해결하면이 실제로 최고의 답변과 아름답게 작동 발견했다. – scripter78

0

LINQ를 객체를 생성합니다.

당신은 ToList()를 사용하여 쿼리를 실행하기 위해 LINQ 문을 변경할 수 있습니다, 다음

new JArray(
     (from e in db.HostedVoiceAAKeys 
     where e.HostedVoiceAAID == aaid.HostedVoiceAAID) 
      .ToList() 
      .Select(h => new JObject(
        new JProperty("id",e.OptionKey), 
        new JProperty("text",e.OptionGuid))) 
      .ToArray() 
    ) 

LB에의 대답에서 알 수 있듯이 있지만, 사용자 정의 클래스를 작성하는 것입니다 ... Select()를 사용 JObject들로 프로젝트 우선 접근법.

+0

이 솔루션은 나에게 실제로 오류가 발생했습니다. 비 정적 메서드는 대상이 필요합니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오. 예외 정보 : System.Reflection.TargetException : 비 정적 메서드에는 대상이 필요합니다. – scripter78

+0

그래서 EF로 오류 메시지에 대한 연구를 한 후에는 항상 null 값과 관련되어있는 것처럼 보입니다. 결과를 두 번 확인하고 결과를 알려줍니다. – scripter78

+0

LB가 작동하는 것처럼이 솔루션을 특별히 테스트하지 않았습니다. 아름답게 지금 나는 당신이 제안한 코드와 관련이없는 오류를 수정했다.이제 앞으로 나아가이 프로젝트를 진행할 수있을 것입니다. BTW는 내가 얻고있는 오류 메시지는 where 절의 null 값 때문이었습니다. 극단 – scripter78