2012-04-04 4 views
1

Linqtosql을 사용하여 데이터베이스에서 들어오는 목록을 표시하려고하는데 잘못했다고 생각합니다. ISingleResult를 IEnumerable로 변환 할 수 없습니다.

난 당신이 더 정보를 원하는 경우 데이터 here를 검색 할 SPROC를 썼다 : 을 그리고 이것은 내 코드입니다 :

Error 21 Instance argument: cannot convert from 
'System.Data.Linq.ISingleResult' to 'System.Collections.Generic.IEnumerable'. 

당신은 알고 계십니까 :

 protected List<MySubject> GetSubjects(int userID, string Datetime) 
    { 
     userID = user_id; 
     string[] dates = Datetime.Split('-'); 
     int year = int.Parse(dates[2]); 
     int month = int.Parse(dates[1]); 
     int day = int.Parse(dates[0]); 
     ClassDAO classClass = new ClassDAO(); 
     List<MySubject> myTodaySubjects = GetSubjectsLinq(userID, day); 
     GetSubjectsLinq(userID, day); 
     return myTodaySubjects; 
    } 

    private List<MySubject> GetSubjectsLinq(int UserId, int day) 
    { 
     MySchoolDBDataContext db = new MySchoolDBDataContext(); 
     string Suserid = UserId.ToString(); 
     string Sday = day.ToString(); 
     var sub = db.GetSubjects(Sday , Suserid); 
     return sub.ToList<MySubject>(); 
    } 

이 라인 "return sub.ToList<MySubject>();"이 오류를 보여줍니다 어떻게 해결할 수 있습니까?

답변

2

당신의

db.GetSubjects (Sday, Suserid)를 확인;

메서드 (저장 프로 시저). 특정 유형의 단일 값 하나만 반환하는 것처럼 보입니다. 즉, List<T>과 같은 IEnumerable<T>에 할당 될 수 없습니다.

LINQ에서 저장 프로 시저를 사용하기 때문에 자동으로 데이터를 저장하는 클래스 T (프로 시저 이름 + 결과)가 생성됩니다. 반환되는 유형은 항상 ISingleResult<T>입니다.

그래서, 당신은 시도 할 수 있습니다 다음

ISinlgeResult<MySubjectResult> sub = db.GetSubjects(Sday , Suserid); 
foreach(MySubjectResult val in sub) 
{ 
... 
} 

또는 사용을 db.GetSubjects (Sday , Suserid).ReturnValue;

+0

@OnlyHope - 답변에서 언급 한 두 가지 방법 중 하나를 시도해보십시오. 찾고있는 결과는 실제로 ISingleResult에 래핑됩니다. – TheBoyan

+0

이것은 매우 도움이됩니다 ... sooo 많이 감사합니다. – OnlyHope

+0

@OnlyHope - 항상 도와 드리겠습니다.) – TheBoyan

0

당신이 ... proc 디렉토리에 저장 결과를 반환 할 수있는 방법의 수는

공공 YourDataContext 아래 참조있다 문맥; JSON 반환을 가정

//

// 그냥 복잡한 수익을 가정
public JsonResult GetResults(string param1, string param2) 
{ 
    using(context = new YourDataContext()) 
    { 
     return Json(context.YourStoredProc(param1, param2).ToList<YourStoredProcResult>()); 
    } 
} 

public List<YourStoredProcResult> GetResults(string param1, string param2) 
     { 
      using(context = new dataDataContext()) 
      { 
       return context.YourStoredProc(param1, param2).ToList<YourStoredProcResult>(); 
      } 
     } 

// .... 다른 방법이

1

같은 문제에 대한 모든 곳을 찾고 있었다 그리고 그 모든 것만 찾아 내면 foreach 루프가됩니다. 그러나 가장 간단한 것이 가장 간단합니다. .ToList() :

return db.GetSubjects(Sday , Suserid).ToList(); 
관련 문제