2009-04-08 5 views
0

quelqu'un peut m'aider sur un problème dans la requête LINQ to SQL Visual Basic.Comptez entre la plage de la liaison de date dans gridview. LINQ to SQL Visual Basic

Ma base de données a trois tables,

* Students(StudentID, StudentName), 
* Class(ClassID, ClassDate), 
* Attendance(StudentID, ClassID) which Attendance tables is the junction table between Students and Class. 

Par exemple:

étudiants

StudentsID ............. StudentName

1001. ..................... Smith

1002 ...................... John

1003 ...................... Bob

classe

ClassID ............ ClassDate

1 ...................... 1/1/2009

2 ............ .......... 1/3/2009

3 ..................... 1/7/2009

Présence

StudentID ............ CLASSID

1001 ................... 1

1002 .. ................. 1

1003 ................... 1

1001 .. ................. 2

1003 ................... 2

1001 ................... 3

1002 ................... 3

1003 ................... 3

J'ai essayé la requête Visual Basic LINQ to SQL ci-dessous pour lister tous les étudiants et le nombre de fréquentation dans un plage de date.

1 Dim db = New AttendanceControllerDataContext 
2 
3 Dim result = From std In db.Students _ 
4 Select std.StudentID, _ 
5 std.StudentName, _ 
6 Attendance = std.Attendances.Count() 
7 
8 GridView1.DataSource = result 
9 GridView1.DataBind() 

Lorsque je tente cela, il me donne:

StudentID ........ StudentName ..... présence

1001 ......... ...... Smith ..................... 3

1002 ............... John ...................... 2

1003 ............... Bob ...... .................3

En ligne 6, Présence Je souhaite compter en fonction de la plage de dates dans la Table des classes, Par exemple si j'ai sélectionné une plage de dates entre 1/2/2009 et 1/7/2009, alors j'ai essayé le code suivant:

1 Dim db = AttendanceControllerDataContext 

2 Dim result = From std In db.Students, atd In db.Attendances _ 
3    Where atd.studentID = std.studentID _ 
4    Select std.studentID, _ 
5    std.studentName, _ 
6    Attendance = atd.Class.date >= 1/2/2009 _ 
7    And atd.Class.date <= 1/7/2009 std.Attendances.Count() 
8 GridView1.DataSource = result 
9 GridView1.DataBind() 

le résultat est:

StudentID ........ StudentName ..... présence

1001 ......... ...... Smith ..................... 2

1001 ............... Smith ..................... 2

1002 ..... .......... John ...................... 1

1003 ........... .... Bob ....................... 2

1003 ............... Bob ....................... 2

Cependant, je voulais juste une liste qui ressemblent ci-dessous seulement:

StudentID .... .... StudentName ..... Présence

1001 ............... Smith ..................... 2

1002 .... ........... John ...................... 1

1003 .......... ..... Bob ....................... 2

Comment est-ce que je peux faire ceci? Toute suggestion? Merci d'avance ..

Répondre

1

Au lieu de

Attendance = std.Attendances.Count() 

dans votre premier exemple de code utilisé

Attendance = std.Attendances.Where(Function(att) att.Class.ClassDate >= "1/2/2009" And att.Class.ClassDate <= "1/7/2009").Count() 
+0

MERCI BEAUCOUP! Mon problème est résolu maintenant. C'est une technique vraiment utile. MERCI !!!! – Vicheanak

Questions connexes