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

count items in array except value that equal to -1

我有这个 LINQ to 实体:

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。

我必须在上面的查询中更改什么才能实现它?

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

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

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

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

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

使用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,因为 Count linq to entities 不支持谓词重载

您可以利用 LINQ 中的 Where 子句:

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

您也可以删除 .ToArray(),因为它是多余的。

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

试试这个

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