2010-11-13 68 views
1

我正在讀取來自XLS文檔的數據,並且使用了非常棒的LINQ to Excel庫。 我遇到的問題是處理LINQ的更多問題。考慮LINQ to Excel的問題

我從Excel工作表中讀取新的和更新的事件。所以我想檢查一下事件是否已經存在於數據庫中,如果有,我想把它與事件掛鉤,然後用我讀過的所有新數據更新它。有些代碼:

var excel = new ExcelQueryFactory("filepath"); 

var getincident = from jj in excel.Worksheet<Incident>("Sheet1") 
        select jj; 

foreach (var incident in getincident) 
{ 
    if (incident.CallId.Trim() == "") 
     break; 
    if (exists(incident.CallId, context)) 
    { 
     incident.id = (from b in context.Incidents 
         where b.CallId == incident.CallId 
         select b.id 
        ).First(); 
     context.Incidents.Attach(incident, true); 
    } 
    else 
    { 
     context.Incidents.InsertOnSubmit(incident); 
    } 

    context.SubmitChanges(); 

} 

與存在是一個簡單的檢查,如果事件存在:

private bool exists(string piCallId, DataClasses1DataContext context) 
{ 
    return (from b in context.Incidents 
      where b.CallId == piCallId select b 
      ).Any(); 
} 

我需要一些方法首先要檢查是否添加了所有新數據之前存在的事件,然後提交更改。請幫忙。

+0

我不太明白你的問題?你的存在方法是否已經檢查過,看看事件是否存在,並且在插入/附加之前調用它? – sgmoore 2010-11-13 16:51:11

+0

它工作正常,以檢查事件是否存在。我遇到的問題是我應該如何更新數據庫中的現有事件。我想首先從db獲取對象,然後添加所有新屬性,然後提交更改,但我不能這樣做,因爲在foreach循環中保存了所有我想更新現有事件的新值,我希望你明白我的意思。 – Fore 2010-11-13 16:55:02

回答

0

這是做你想做的嗎?

var existingIncident = 
    (from b in context.Incidents 
    where b.CallId == incident.CallId 
    select b 
    ).SingleOrDefault(); 

if (existingIncident != null) 
{ 
     existingIncident.xxx = incident.xxx; 
     existingIncident.yyy = incident.yyy; 
     ... 
} 
else 
    context.Incidents.InsertOnSubmit(incident);