2010-11-13 6 views
1

Je lis les données d'un document XLS, et j'utilise la superbe bibliothèque LINQ to Excel. Le problème que j'ai est plus d'un problème avec traitant LINQ. Je lis des incidents nouveaux et mis à jour à partir d'une feuille Excel. Donc, je veux vérifier si l'incident existe déjà dans la base de données, et si c'est le cas, je veux le brancher avec cet incident et ensuite le mettre à jour avec toutes les nouvelles données de l'Excel que j'ai lu. Certains code:Question considérant LINQ to 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(); 

} 

et existe est une simple vérification si l'incident existe:

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

je besoin d'un moyen pour vérifier si l'incident existe avant toutes les nouvelles données sont ajoutées, puis soumettre les changements. S'il vous plaît aider.

+0

Je ne comprends pas très bien votre problème? Est-ce que votre méthode existante ne vérifie pas déjà si l'incident existe et que vous appelez cela avant le Insérer/Attacher? – sgmoore

+0

Cela fonctionne très bien pour vérifier si l'incident existe. Le problème que j'ai est comment je devrais mettre à jour l'incident existant dans la base de données. Je voudrais d'abord obtenir l'objet de DB, puis ajouter toutes les nouvelles propriétés, puis soumettre des changements, mais je ne peux pas le faire, car dans la boucle foreach contient toutes les nouvelles valeurs que je veux mettre à jour l'incident existant, j'espère vous comprenez ce que je veux dire. – Fore

Répondre

0

Est-ce que cela fait ce que vous voulez?

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