计算使用LINQ和C#连续数量为null的几个单元格



我有一个用于某些电影的数据库。我想计算每个单独的ID,有多少个单元格为空或空名并显示计数。

ex:

id标题价格类型

1我们的最后一个10 null

2其他8恐怖

3 x-men null null

我希望能够显示ID 3的显示,有2个缺失值或ID 1有1个丢失值

到目前为止,我有此代码:

 Movie movieId = _context.Movies.Find(id);
 var movies = from m in _context.Movies where m.ID == id select m ;
 var model = new PartialModel();
 model.Count = movies.Count();

不幸的是,该代码仅显示选择了具有特定ID的电影。我尝试了x => x =计数为null,但它给出了语法错误。

我认为我需要一种从电影中获取空字段的方法,但我不知道该怎么做。

谢谢

您最好的选择是在类型上添加属性或方法,并使用反射来计算具有null值的公共属性数量。请勿在linq to sql调用中进行此操作,它不属于那里。

public class Movie {
  // existing properties

  // this should not be mapped back to the EF store
  public int NumberOfNullPropValues => typeof(Movie).GetProperties().Count(x => x.GetValue(this, null) == null);
}

请注意,这仅适用于参考类型和Nullable<T>,它不会检查空字符串或默认值,如果类型为struct(例如,对于int,则为0)。另外,如果您想检查非公共属性,则需要将绑定标志传递给GetProperties调用

您可以使用Reflection

这样(一种返回对象具有多少个null属性的方法):

public int GetNullProperiesCount(object anyObject)
{
    var objType = anyObject.GetType();
    var nullCount = 0;
    foreach(var propInfo in objType.GetProperties())
    {
        if(propInfo.CanRead)
        {
           object val = propInfo.GetValue(anyValue, null);
           if(val == null) ++nullCount;
        }
    }
    return nullCount;
}

然后,您可以迭代任何集合,并获得其项目具有多少个空属性。

反射在CPU周期方面可能很昂贵。我将使用数据集读取和检查数据。这很容易做,并且不会强加Linq的开销

相关内容

最新更新