在linq中使用count方法的错误无法实现将int转换为bool

时间:2017-03-05 19:17:27

标签: c# linq

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来处理匿名类,但问题没有解决,请帮我找出问题所在。

提前致谢

2 个答案:

答案 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() }
            );

如果有大量选票(或者候选人),也应该更快地评估。