2017-02-27 58 views
2

我有一些電影的數據庫。我想爲每個個人ID計數有多少個單元格爲空或空值並顯示計數。使用Linq和c計算有多少個單元格爲空行#

例如:

標識產品名稱價格類型

我們10空的

1最後

2其餘8恐怖

3 X戰警空空

我想能夠顯示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,但它給出了語法錯誤。

我想我需要一種方法來從電影中獲得空字段,但我不知道該怎麼做。

謝謝

+0

是將ID定義爲int還是int ?.如果你在整數中有空,你需要問號。 – jdweng

回答

3

最好的辦法是增加的類型的屬性或方法,並使用反射來算有一個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>,也不會檢查空字符串或在情況下默認值的類型是一個結構(如0 int)。此外,如果你想檢查非公共屬性,你需要的綁定標誌傳遞給GetProperties呼叫

1

您可以使用Reflection

像這樣(返回很多空的屬性,如何做一個對象有一個方法):

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; 
} 

然後,您可以遍歷任何集合並獲取其項目具有多少空屬性。

0

在CPU週期方面反射可能很昂貴。我會使用DataSet來讀取和檢查數據。這很容易做到,並且不會增加Linq的開銷