2010-05-07 2 views
3

Je travaille sur une petite application côté pour un client par lequel ils me fournissent une liste de villes et je dois les insérer dans la base de données et associer eux avec leurs enregistrements parent.Linq to SQL - Comment vérifier un enregistrement n'existe pas avant d'insérer

Exemple:

ID | PID | Region 
1   0   California 
2   1   Los Angeles 
3   1   San Fransisco 

Maintenant mon code ressemble à ceci

Dim input As StreamReader 
    Dim index As Integer 
    Dim filename As String 
    Dim RegionDC As New DAL.RegionsDataContext 



    For Each TextFile As String In Directory.GetFiles(Server.MapPath("~/app_data/business-trader cities/")) 
     input = File.OpenText(TextFile) 
     filename = New FileInfo(TextFile).Name 
     index = 0 


     ''# this is where we want to select the ID for the filename' 
     Dim _ID = (From R In RegionDC.bt_Regions _ 
       Where R.Region = filename.Replace(".txt", "") _ 
       Select R.ID).FirstOrDefault 

     While Not input.EndOfStream 

      Dim q = (From r In RegionDC.bt_Regions _ 
        Where r.Region = input.ReadLine() _ 
        Select r.ID).FirstOrDefault 

      ''# ***********************************' 
      ''# HERE IS WHERE IM TRYING TO VERIFY' 
      ''# IF THE RECORD EXISTS OR NOT' 
      ''# ***********************************' 

      ''# now we loop through the txt file' 
      ''# and insert the data into the database' 
      Dim oRegion As New DAL.bt_Region 
      oRegion.Region = input.ReadLine() 
      oRegion.FSSearchCount = 0 
      oRegion.WSearchCount = 0 
      oRegion.PID = _ID 

      RegionDC.bt_Regions.InsertOnSubmit(oRegion) 
      RegionDC.SubmitChanges() 

     End While 

     ''# clean up the locked files' 
     input.Close() 
     input.Dispose() 
    Next 

Donc, fondamentalement, si Los Angeles est dans le fichier TXT, je ne veux pas réinscrit dans la base de données depuis ça existe déjà.

Quelqu'un peut-il m'aider à comprendre comment vérifier si un enregistrement existe déjà avant l'insertion?

Répondre

1

En supposant qu'aucun enregistrement ne puisse avoir un ID de 0, je pense que c'est juste une question de tester si q = 0.

Mais je pense que vous avez un bug dans le code: vous appelez input.ReadLine() deux fois dans chaque itération, donc vous testez si Los Angeles est déjà dans la base de données et ensuite essayez d'insérer San Francisco. Capturez simplement la ligne dans une variable, puis utilisez-la.

1
if (RegionDC.bt_Regions.Any(r => r.Region == input.ReadLine())) 
{ 
    // Yes it exists 
} 
else 
{ 
    // No it doesn't exist 
} 

Utilisé un converter pour faire la version VB :)

If RegionDC.bt_Regions.Any(Function(r) r.Region = input.ReadLine()) Then 
    ''# Yes it exists 
Else 
    ''# No it doesn't exist 
End If 
+0

@rockinthesixstring vous ont pu comprendre cela? Si cette réponse vous a aidé à ne pas oublier de la marquer comme la réponse acceptée. – Kelsey