var result =surveyEntities.Candidates.Join(surveyEntities.Votes,
t=>t.CandidateID,
d=>d.CandidateID,
(t,d)=> new {
t=t,
d=d
}).GroupBy( temp0=> new {
Name= temp0.t.Name, CandidateID=temp0.t.CandidateID,
Image=temp0.t.Image
},
temp0=>temp0.d).Select(g=> new number1{
CandidateID = g.Key.CandidateID,
Name = g.Key.Name,
Image= g.Key.Image,
**count= g.Count(p=>p.CandidateID)**}).ToList();
}
我在跟踪代码时遇到错误' count = g.Count(p => p.CandidateID)'。我已经创建了一个单独的类号1来处理匿名类,但问题没有解决,请帮我找出问题所在。
提前致谢
答案 0 :(得分:1)
您使用的方法签名Port: '80'
Protocol: HTTP
,如下:
Count
public static int Count<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
是一个整数,因此对于每个项目(p.CandidateID
),您都会返回TSource
,这是不正确的。对于集合的每个项目,您应该返回一个布尔值,或者可以作为布尔值计算的表达式。
E.g。像这样的东西是正确的语法:
int
显然,在你的情况下,这可能没有任何意义,但具有正确的语法。
你想要想要的东西是每个团队拥有的物品数量。如果是这样,您可以使用以下内容:
g.Count(p=> p.CandidateID > 0)
答案 1 :(得分:1)
看起来你正试图将候选人的选票分组。首先,您要加入候选人投票,然后通过总结候选人身份的新对象对投票进行分组,然后尝试获得这些候选人的总票数。正确的吗?
如果是这样,Christos的答案是正确的,但如果我可以改写它:.Count(...)
实际上是指 count-when-true ,意思是,计算时间lambda中的条件是真的。但是你没有使用lambda来返回一个真实的bool,就像p.CandidateID != null
那样。
他的正当使用 - .Count()本身应该可行。但是,除此之外,如果我的解释是正确的,您的整个Linq语句可以简化为以下内容:
var result = surveyEntities.Candidates
.GroupJoin(
surveyEntities.Votes,
c => c.CandidateID,
v => v.CandidateID,
(c, v) => new {
Name = c.Name,
ID = c.CandidateID,
Pic = c.Image,
Votes = v.Count() }
);
如果有大量选票(或者候选人),也应该更快地评估。