我有一个存储过程,它返回一个结果集:
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
答案 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());
(即相同的代码),它可以在服务器上进行工作,只需通过网络返回一个号码。