计算数组中的项目,除了等于-1的值

时间:2015-11-14 15:48:51

标签: c# .net linq count linq-to-entities

我有这个LINQ to entity:

int siteNumbers = g.Select(x => x.siteId).ToArray().Distinct().Count()

例如:

x.siteId-1时,我不希望计算该值,即我只想计算不等于-1的值。

x:[1,2,6,-1]时,siteNumbers值为3。

x:[-1]siteNumbers值为0.

我需要在上面的查询中更改以实现它吗?

5 个答案:

答案 0 :(得分:3)

您可以利用LINQ中的Where条款:

int siteNumbers = g.Where(x => x.siteId != -1)
                   .Select(x => x.siteId)
                   .Distinct()
                   .Count();

您还可以删除.ToArray(),因为它是还原剂。

工作示例: https://ideone.com/LvOe0i

答案 1 :(得分:2)

使用Where过滤结果

int siteNumbers = g.Where(x => x.siteId != -1)
                   .Select(x => x.siteId)
                   .Distinct()
                   .Count();

同样调用ToArray可能没有必要,因为siteId是完整的,SQL知道要比较它们并得到不同的值。

您还可以向Count

添加条件
int siteNumbers = g.Select(x => x.siteId)
                   .Distinct()
                   .ToArray() 
                   .Count(x => x != -1);

你应该调用ToArray,因为linq到实体不支持带有谓词的Count重载

答案 2 :(得分:1)

您可以在Select语句之前添加Where语句,如下所示:

int siteNumbers = g.Where(x => x.siteId != -1).Select(x => x.siteId).ToArray().Distinct().Count()

答案 3 :(得分:1)

您可以在查询中使用where子句过滤掉siteId == -1

的数据
int siteNumbers = g.Where(f => f.siteId != -1)
                   .Select(x => x.siteId)
                   .Distinct()
                   .Count();

另请注意,您不需要ToArray()

答案 4 :(得分:0)

试试这个

int siteNumbers = g.Select(x=>x.siteId).Where(i => i != -1).Distinct().Count()