2012-04-11 39 views
1

所以我有一个窗体窗体应用程序(客户端),它显示哪些组属于学生。Linq问题没有返回学生

在服务方面,这是像这样做:

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”

+1

你的代码有很多问题。首先:使用'.Any()'而不是'.Count()> 0'。这是一个性能提示,但它不应该影响代码的正确性。其次,你的'AddStudentToGroup'方法实际上将THREE学生添加到该组中:一个ID是给定ID,并且其第一个和最后一个名字都是空的;其ID和姓氏为空,并且其名字是给定的名字的人;以及其ID和名字为空并且其姓氏是给定的姓氏的人。 – phoog 2012-04-11 17:46:50

+0

我只是希望,如果我添加学生到一个组,我不需要以相反的方式做** **以及**? – 2012-04-11 17:47:33

+0

'Groupsz'是一个错误,还是与'Groups'分开的一个集合? – phoog 2012-04-11 17:47:39

回答

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

    } 
+1

这意味着你还没有发现问题 - 只是一个修复:)。你的代码真是令人困惑,我认为你应该从@phoog中获得一些提示,重新组织一下,然后解决它。 – NSGaga 2012-04-11 18:33:44

+0

只要你不擅长这一点,当它开始有意义时,你就会发现你可能是错的。就像我回答中的上述代码一样,对我来说,它告诉我我正在制作重复记录。但是因为我没有数据源,所以我不能真正发现。这些都是现场直播。 – 2012-04-11 18:39:15

+2

然后,你应该设置一些测试,模仿源头,'活'(组件),并测试你的东西在少生活 - 这是许多人的日常问题,你不是第一:)。 – NSGaga 2012-04-11 19:21:10

3

正如您对问题的评论中所述,您的代码有点令人困惑。正如你无疑发现的那样,这可能会使代码中发现逻辑错误更加困难。

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

一旦你缩小了问题的位置,如果你仍然不明白为什么问题仍然存在,你应该有更好的位置来问一个更关注于stackoverflow的问题。