我有一个用于某些电影的数据库。我想计算每个单独的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的开销