从LINQ存储过程中选择一个不同的计数

时间:2010-10-28 08:12:54

标签: c# linq lambda group-by max

我有一个存储过程,它返回一个结果集:

testID(guid),testName,outcomeID(guid),outcomeName - fields

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

等。 所以基本上有很多测试,每个都有很多结果,一些结果在测试中会很常见

我想做的是在所有测试中获得MAX计数结果,我想用某种lambda linq类型的东西来做这件事。 所以对于上述结果我正在寻找数字5

如果我这样做:

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?

如果我调试我得到(删除上面一行的计数部分)一个IGrouping Linq的东西确实有一个非公共计数属性,但我似乎无法得到它。 我希望有更好的方法来获得这个数字。请有人开导我

非常感谢

NAT

1 个答案:

答案 0 :(得分:2)

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

但是,请注意个人我正在寻找一种方法在数据库中执行此操作,而不是仅通过网络获取所有数据以获取单个数字。一个很好的选择是将代码推送到UDF,并简单地更改SP SELECT * FROM dbo.YourUdf(args) - 原因是UDF是可组合的,因此您可以将UDF映射到数据中 - 上下文并有:

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

(即相同的代码),它可以在服务器上进行工作,只需通过网络返回一个号码。