1

そのため、どのグループが学生に属しているかを表示する Windows フォーム アプリケーション (クライアント) があります。

サービス側では、これは次のように行われます。

    List<Student> students = new List<Student>();
    List<Group> Groups = new List<Group>();
    public List<Group> GetStudentCollectionByGroup(string anything)
    {

        List<Group> groups = (from g in Groups
                              where
                                  (from t in g.Groupsz where
                                          string.Equals(t.StudentID, anything, StringComparison.CurrentCultureIgnoreCase)
                                       || string.Equals(t.FirstName, anything, StringComparison.CurrentCultureIgnoreCase)
                                       || string.Equals(t.LastName, anything, StringComparison.CurrentCultureIgnoreCase)
                                   select t).Count() > 0
                              select g).ToList();
        return groups;
    }

グループに学生を追加するには、次の方法を使用しました。

    public void AddStudentToGroup(string group, string studentID, string firstName, string lastName)
    {
        var result = Groups.Where(n => String.Equals(n.GroupName, group)).FirstOrDefault();
        if (result != null)
        {
            result.Groupsz.Add(new Student() { StudentID = studentID });
            result.Groupsz.Add(new Student() { FirstName = firstName });
            result.Groupsz.Add(new Student() { LastName = lastName });
        }
    }  

そして、私の GET メソッドは次のようになります。

    [OperationContract]
    [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/GetStudentCollectionByGroup/{anything}")]
    List<Group> GetStudentCollectionByGroup(string anything);

データ コントラクトは次のようになります。

public class Student
{
    public Student()
    {
        StudentGroup = new List<Group>();
    }
    [DataMember(Name = "StudentID")]
    public string StudentID { get; set; }
    [DataMember(Name = "FirstName")]
    public string FirstName { get; set; }
    [DataMember(Name = "LastName")]
    public string LastName { get; set; }
    public List<Group> StudentGroup { get; set; }
}
[DataContract(Name = "Group")]
public class Group
{
    public Group() 
    {
        Groupsz = new List<Student>();
    }
    public string GroupName { get; set; }
    public List<Student> Groupsz { get; set; }
}

特定の学生を入力すると、クライアント側からグループを問題なく取得できるようになりました。しかし、グループに基づいて学生を取得するために別のテキストボックスに入力すると、何も返されませんか? たとえば、グループ「A」と入力すると、そのグループに属するすべての学生が返されます。学生「B」に属するグループのコレクションを返す方法と同じように

4

2 に答える 2

3

あなたの質問へのコメントで述べたように、あなたのコードはやや混乱しています。間違いなく発見したように、これにより、コード内のロジックのエラーを見つけるのがより困難になる可能性があります。

まだ行っていない場合は、デバッガーの使用方法を学習してください。グループ内の学生を返すメソッドをステップ実行します。「ローカル」ウィンドウを使用するか、変数の上にマウスを置いて、変数の値を確認します。どの変数が予想外の値を持っているかをかなり簡単に確認できるはずです。そしてもちろん、次のステップは、予期しない値を持つ理由を特定することです。コードのエラーであるか、データベース内の予期しないデータである可能性があります。

問題の場所を絞り込んだ後でも、問題が解決しない理由がわからない場合は、stackoverflow でより焦点を絞った質問をすることができます。

于 2012-04-11T18:02:54.880 に答える
1

理由はわかりませんが、学生をグループに追加し、グループを学生に追加することはうまくいくようです。ただし、レコードを複製している可能性があります。

  public void AddStudentToGroup(string group, string studentID, string firstName, string lastName)
    {
        var result = Groups.Where(n => String.Equals(n.GroupName, group)).FirstOrDefault();
        var result1 = students.Where(n => String.Equals(n.StudentID, studentID)).FirstOrDefault();
        if (result != null)
        {
            result.Groupsz.Add(new Student() { StudentID = studentID, FirstName = firstName, LastName = lastName });
        }
        if (result1 != null)
        {
            result1.StudentGroup.Add(new Group() { GroupName = group });
        }

    }  
于 2012-04-11T18:25:40.653 に答える