Linq问题没有回归学生

时间:2012-04-11 17:41:23

标签: c# wcf linq web-services rest

所以我有一个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”

的群组一样

2 个答案:

答案 0 :(得分:3)

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

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

一旦你缩小了问题的位置,如果你仍然不理解为什么问题仍然存在,你应该更好地在stackoverflow上提出一个更有针对性的问题。

答案 1 :(得分: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 });
        }

    }