2012-04-11 49 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的問題。