2010-11-13 74 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);