2013-02-26 51 views
3

定義我得到這個錯誤,我非常有信心是什麼導致它,但不是很確定如何解決它。C# - 二進制運算符Equal沒有爲類型'System.Int64'

我使用entity framework code first,我有我的實體的一個外鍵,我故意設置爲long?

public long? ClientId { get; set; } 
public virtual Client Client { get; set; } 

然後我用數據形成創建填充DataGridView數據庫,問題來了。我正在通過dgv的元素使用自定義搜索/篩選,並且此自定義篩選的代碼被繼承。它一直工作到現在爲止,但當我嘗試過濾ClientID我得到錯誤的帖子名稱。

我開始調試,看到這一點:

if (property.PropertyType == typeof(string)) 
         {//some code 
else if (property.PropertyType == typeof(bool)) 
         {//other code 
else if(rule.Data.Equals("1") || rule.Data.ToLower().Equals("true")) 
          {//again some code 
else if (property.PropertyType == typeof(Int32)) 
         {//some code 
... 

而且因爲我的值類型爲long?我不那麼下面的條件讓我的代碼進入它是默認條件:

else 
    { 
     long value = 0; 
     if (long.TryParse(rule.Data, out value)) 
    {..code 

根據調試器解析返回true,因爲我進入if正文,但然後我收到上面的錯誤和我的屬性的類型是System.Nullable1[System.Int64]

我有第二個外鍵,它使用完全相同的邏輯,一切都很好。唯一的區別是,我可以看到,對於工作案例,類型爲long,錯誤案例類型爲long?

我想離開類型long?,但不知道是否有任何解決方法。

+1

因此,您在未向我們顯示的代碼中收到錯誤,我是否正確理解該錯誤? – 2013-02-26 12:23:19

+2

「你看到那個代碼」在哪裏?該方法的目的是什麼(該方法的名稱有助於識別)。另一個非常重要的問題是:什麼是錯誤? – 2013-02-26 12:30:54

+0

是的,該項目非常大,所以我試圖找出問題。如果我不明白,那麼我想我必須自己做。但是fwi調用這個方法的代碼是'GridFilterResult result = service.List(gridSettings);'。但我認爲這個問題是我試圖把'long?'解析爲'long'我試圖給'long?添加一個特定的情況,但是似乎不允許解析爲'long?'...... – Leron 2013-02-26 12:31:01

回答

0

我知道這是一個古老的問題,但我遇到過一代T?並不真的工作,但將其更改爲Nullable<T>的情況。即它會生成適用於long的代碼,但不適用於long?

你的情況:

public Nullable<long> ClientId { get; set; } // change long? to Nullable<long> 
public virtual Client Client { get; set; } 

這是否幫助?

+0

對不起,這是前一陣子。我不再爲同一家公司工作,所以我無法測試你的建議。如果它適用於某些情況,請將其留在此處,以便最終幫助其他人。 – Leron 2014-09-19 08:44:57

相關問題