我有这个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.
我需要在上面的查询中更改以实现它吗?
答案 0 :(得分:3)
您可以利用LINQ
中的Where
条款:
int siteNumbers = g.Where(x => x.siteId != -1)
.Select(x => x.siteId)
.Distinct()
.Count();
您还可以删除.ToArray()
,因为它是还原剂。
答案 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()