2010-10-28 5 views
1

j'ai une procédure stockée qui renvoie un jeu de résultats ainsi:la sélection d'un nombre distinct de LINQ stockée Proc

testid (GUID), NomTest, outcomeID (GUID), outcomeName - champs

testGuid1, testName1, OutcomeGuid1 , outcome1

testGuid1, testName1, OutcomeGuid2, outcome2

testGuid1, testName1, OutcomeGuid3, outcome3

testGuid1, testName1, OutcomeGuid4, outcome4

testGuid1, testName1, OutcomeGuid5, outcome5

testGuid2, testName2, OutcomeGuid9, outcome9

testGuid2, testName2, OutcomeGuid1, outcome1

testGuid2, testName2, OutcomeGuid3, outcome3

etc. donc, fondamentalement, il y a un certain nombre de tests qui ont chacun un certain nombre de résultats, certains des résultats seront communs à travers les testsCe que je voudrais faire est d'obtenir un nombre MAX de résultats à travers tous les tests, je voudrais le faire avec une sorte de chose linq linq. donc pour les résultats ci-dessus je cherche le numéro 5

si je fais:

var Results = dc.getTests(id); 
//need the whole resultsset for binding to something in a mo. 
//then would like to do somethign along the lines of: 
int count = Results.GroupBy(t=>t.testID).count(*).Max() //or something? 

si je debug i get (enlever la partie de comptage de la ligne ci-dessus) une chose IGrouping Linq qui n'a une propriété de compte non publique, mais je ne peux pas sembler y arriver. Je m'attends à ce qu'il y ait une meilleure façon d'obtenir ce numéro de toute façon. quelqu'un pourrait me éclairer s'il vous plaît

merci beaucoup

nat

Répondre

2
var max = Results.GroupBy(t=>t.testID).Max(grp => grp.Count()); 

Cependant, notez que personnellement je serais à la recherche d'une façon de le faire à la DB, plutôt que de chercher de tout ce qui données sur le réseau juste pour obtenir un seul numéro. Une bonne option serait de pousser le code dans un UDF, et changer la SP si simplement SELECT * FROM dbo.YourUdf(args) - la raison étant que des FDU sont composable, vous pouvez mapper l'UDF dans le contexte de données et ont:

var max = db.MyUdf(args).GroupBy(t=>t.testID).Max(grp => grp.Count()); 

(c'est-à-dire le même code), et il ferait le travail sur le serveur, juste ramener un seul numéro sur le réseau.

+0

salut marc merci pour cela. Je n'utilise pas cette requête uniquement pour obtenir ce nombre, les données sont liées à des choses, je pensais juste que je pourrais travailler sur ce nombre à partir du jeu de résultats plutôt que d'exécuter une nouvelle requête pour obtenir ce nombre. – nat

+0

@nat - sure; a du sens dans ce cas. –

Questions connexes