2011-06-02 60 views
1
 private void button1_Click(object sender, EventArgs e) 
    { 

     DataClasses1DataContext dc = new DataClasses1DataContext(); 
     var rec = dc.reportsSents.FirstOrDefault(); 
     int rowCount = dc.reportsSents.Count(); 


     if (rec != null) 
      { 

      for(int i = 0; i <= rowCount;) 
       { 


        var matchedCaseNumber = (from CaseNumberKey in dc.GetTable<reportsSent>() 
            select CaseNumberKey).FirstOrDefault(); 

        (new MyReportRenderer()).RenderTest(Convert.ToString(matchedCaseNumber)); 

        dc.reportsSents.DeleteOnSubmit(matchedCaseNumber); 
        dc.SubmitChanges(); 

        i = (i +1); 

       } 

      } 

當上面的代碼被執行我得到這個錯誤:如何獲得通過這個錯誤「值不能爲空參數名:實體」

Value cannot be null. Parameter name: entity

和matchedCaseNumber在該行強調:

dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);

這是什麼意思,爲什麼我得到它。我想要做的是將MatchedCaseNumber傳遞給該方法,然後在該方法執行後將其刪除,然後遍歷該表。任何幫助,將不勝感激。

謝謝。

回答

1

matchedCaseNumber可能是null傳遞給DeleteOnSubmit

if(matchedCaseNumber != null) 
{ 
    dc.reportsSents.DeleteOnSubmit(matchedCaseNumber); 
    dc.SubmitChanges(); 
} 

編輯時: 如果我理解你正在試圖做正確的東西,這會更好:

private void button1_Click(object sender, EventArgs e) 
{ 

    DataClasses1DataContext dc = new DataClasses1DataContext(); 

    foreach (var item in dc.reportsSents) 
    { 
     (new MyReportRenderer()).RenderTest(Convert.ToString(item)); 
     dc.reportsSents.DeleteOnSubmit(item); 
    } 
    dc.SubmitChanges(); 
} 
+0

我把它放在循環中,因爲每次循環它都需要拉下一個記錄,因爲前一個記錄被刪除。有沒有更好的方法來做到這一點? – korrowan 2011-06-02 14:43:10

+0

@korrowan我這麼認爲,請檢查我的更新。 – Magnus 2011-06-02 14:51:32

+0

什麼是'項目'指的是? – korrowan 2011-06-02 15:13:08

6

var matchedCaseNumber = (...).FirstOrDefault(); 

dc.reportsSents.DeleteOnSubmit(matchedCaseNumber); 

所以,如果有什麼matchedCaseNumber爲空? OrDefault使這成爲可能。

變化是2號線到:

if (matchedCaseNumber != null) 
    dc.reportsSents.DeleteOnSubmit(matchedCaseNumber); 

此外,

int rowCount = dc.reportsSents.Count(); 

for(int i = 0; i <= rowCount;) 
{ 
    ... 
    i = (i +1);  
} 

或許應該成爲:

for(int i = 0; i < rowCount; i += 1) // note: NOT <= 
{ 
    ...  
} 

你循環rowCount時+ 1次。並且將i的增量移出循環語句確實沒有意義。不要混淆/妨礙opitimizers。

+0

如果它是空的那麼這是一個問題,因爲這應該只在表中有記錄時執行..如果沒有記錄比它不應該..我必須在此之前的代碼中犯了一個錯誤線。 – korrowan 2011-06-02 14:36:39

+0

@korrowan,當您返回_expect_ 1+項時,請勿使用'.FirstOrDefault()'。另請參閱編輯。 – 2011-06-02 15:01:36

1

這意味着那matchCaseNumbernull

當您創建matchCaseNumber時,您使用的是.FirstOrDefault(),它返回該類型的第一個實例或默認值(對於引用類型爲null)。

換句話說,您的查詢:

from CaseNumberKey in dc.GetTable<reportsSent>() 
select CaseNumberKey 

似乎沒有返回數據。

相關問題