1

Linqtosql を使用してデータベースからのリストを表示しようとしていますが、間違っていると思います。

詳細情報が必要な場合は、ここでデータを取得するために SPROC を作成しました。これが私のコードです。

     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>();"はこのエラーを示しています:

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

どうすれば直せますか?

4

3 に答える 3

3

あなたの

db.GetSubjects (Sday、Suserid);

メソッド (ストアド プロシージャ)。特定のタイプの単一の値のみを返しているように見えます。つまり、IEnumerable<T>などに割り当てることはできませんList<T>

LINQ でストアド プロシージャを使用するため、クラス T(プロシージャ名 + "結果") が生成され、データが自動的に格納されます。返される型は常にISingleResult<T>です。

したがって、次のことを試すことができます。

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

または単に使用するdb.GetSubjects (Sday , Suserid).ReturnValue;

于 2012-04-04T11:15:47.137 に答える
1

どこでも同じ問題を探していて、それらすべてのforeachループだけを見つけていましたが、私にとっては最も簡単なことでした.ToList():

return db.GetSubjects(Sday , Suserid).ToList();
于 2014-09-10T08:28:52.270 に答える