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; }
}

现在,当我输入特定的学生时,我从客户端获取组没有问题。但是,当我输入不同的文本框以根据 Group 获取学生时,什么都没有返回?例如,如果我键入“A”,它应该返回属于该组的所有学生。就像我如何返回属于学生“B”的一组组

4

2 回答 2

3

正如对您问题的评论中提到的,您的代码有些令人困惑。正如您毫无疑问地发现的那样,这会使在代码中发现逻辑错误变得更加困难。

如果您还没有这样做,请学习如何使用调试器。逐步执行返回组中学生的方法。使用“locals”窗口或将鼠标悬停在变量上检查变量的值。您应该能够相当容易地看到哪些变量具有意外值。然后,当然,下一步是确定它们为什么具有意外值。这可能是您的代码中的错误,也可能是数据库中的意外数据。

一旦你缩小了问题的位置,如果你仍然不明白为什么问题仍然存在,你应该可以更好地提出关于 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 回答