使用linq计算特定条件下的记录数

本文关键字:记录 条件下 linq 计算 使用 | 更新日期: 2023-09-27 18:02:27

我想从表中检索一些信息,如下所示:

//Fish table: fishid(int32), SpeciesName(nvarchar(50)),age(int?), weight(int?)   
 (from f in Fish 
  where f.SpeciesName=="COD" || f.SpeciesName=="Salmon"
  select f
 ).GroupBy(g=>g.SpeciesName)
  .Select(s= > new 
   { 
      Species=s.Key, 
      Age= (from age_count in Fish where age_count.SpeciesName== s.key && age_count.age!=null  select age_count).Count(),
      Weight= (from Weight_count in Fish where Weight_count.SpeciesName== s.key && Weight_count.Weight!=null  select weight_count).Count()
   };

现在,既然这是有效的,我想一定有更好的方法来做到这一点。有人能建议一些更好的代码吗?

谢谢

使用linq计算特定条件下的记录数

这应该做同样的事情:

var result = Fish.Where(f => f.SpeciesName == "COD" || f.SpeciesName == "Salmon")
                 .GroupBy(f => f.SpeciesName)
                 .Select(g => new {
                    Species = g.Key,
                    Age = g.Count(f => f.Age != null),
                    Weight= g.Count(f => f.Weight != null),
                  });

AgeWeight聚合看起来有点不可思议——它们正在计算每组中关联属性不为空的记录的数量。这是你的意图吗,还是你想要的是每组鱼的"平均年龄"?