2012-11-17 24 views
0

我正在將文本文件中的記錄導入到我的數據庫中。我有它設置來檢查我確保數據庫中沒有重複的記錄。如果數據庫中已有條目,則跳過該記錄。 現在我需要解決的問題是當文本文件中沒有記錄但數據庫中有記錄時。我需要從數據庫中刪除不匹配文件中任何記錄的記錄。從數據庫中刪除不在平面文件中的記錄

public static void ParseComplaint(string location) 
    { 

     Console.WriteLine("Parsing....."); 
     List<AutoMakeNoEntity> am = DBCacheHelper.GetAllMakes().ToList<AutoMakeNoEntity>(); 

     using (var reader = new StreamReader(location)) 
     { 
      foreach (string line in File.ReadLines(location)) 
      { 
       if (string.IsNullOrWhiteSpace(line)) 
       { 
        continue; 
       } 
       var tokens = line.Trim().Split(new char[] { '\t' }); 

       if (am.Any(c => c.MakeName == tokens[3])) 
       { 
        using (RecallsContext context = new RecallsContext()) 
        { 
         string tmp = tokens[0]; 
         if (!context.complaints.Any(c => c.CMPLID == tmp)) 
         { 

          var recalls = new Complaints(); 

          recalls.CMPLID = tokens[0]; 
          recalls.ODINO = tokens[1]; 
          recalls.MFR_NAME = tokens[2]; 
          recalls.MAKETXT = tokens[3]; 
          recalls.MODELTXT = tokens[4]; 
          recalls.YEARTXT = tokens[5]; 
          recalls.CRASH = tokens[6]; 
          recalls.FAILDATE = tokens[7]; 
          recalls.FIRE = tokens[8]; 
          recalls.INJURED = tokens[9]; 
          recalls.DEATHS = tokens[10]; 
          recalls.COMPDESC = tokens[11]; 
          recalls.CITY = tokens[12]; 
          recalls.STATE = tokens[13]; 
          recalls.VIN = tokens[14]; 
          recalls.DATEA = tokens[15]; 
          recalls.LDATE = tokens[16]; 
          recalls.MILES = tokens[17]; 
          recalls.OCCURENCES = tokens[18]; 
          recalls.CDESCR = tokens[19]; 
          recalls.CMPL_TYPE = tokens[20]; 
          recalls.POLICE_RPT_YN = tokens[21]; 
          recalls.PURCH_DT = tokens[22]; 
          recalls.ORIG_OWNER_YN = tokens[23]; 
          recalls.ANTI_BRAKES_YN = tokens[24]; 
          recalls.CRUISE_CONT_YN = tokens[25]; 
          recalls.NUM_CYLS = tokens[26]; 
          recalls.DRIVE_TRAIN = tokens[27]; 
          recalls.FUEL_SYS = tokens[28]; 
          recalls.FUEL_TYPE = tokens[29]; 
          recalls.TRANS_TYPE = tokens[30]; 
          recalls.VEH_SPEED = tokens[31]; 
          recalls.DOT = tokens[32]; 
          recalls.TIRE_SIZE = tokens[33]; 
          recalls.LOC_OF_TIRE = tokens[34]; 
          recalls.TIRE_FAIL_TYPE = tokens[35]; 
          recalls.ORIG_EQUIP_YN = tokens[36]; 
          recalls.MANUF_DT = tokens[37]; 
          recalls.SEAT_TYPE = tokens[38]; 
          recalls.RESTRAINT_TYPE = tokens[39]; 
          recalls.DEALER_NAME = tokens[40]; 
          recalls.DEALER_TEL = tokens[41]; 
          recalls.DEALER_CITY = tokens[42]; 
          recalls.DEALER_STATE = tokens[43]; 
          recalls.DEALER_ZIP = tokens[44]; 
          recalls.PROD_TYPE = tokens[45]; 
          if (tokens.Length == 47) 
          { 
           recalls.REPAIRED_YN = tokens[46]; 
          } 

          context.complaints.Add(recalls); 
          context.SaveChanges(); 
          recalls.Dispose(); 
         } 

        } 
       } 
      } 
     } 
    } 

回答

0

我需要從沒有在文件中匹配任何記錄數據庫中刪除記錄。

如果您希望數據庫與文本文件的內容匹配,爲什麼不簡單地先將它清空?

+0

我不知道同樣的問題 –

+0

其實這是行不通的。 「如果數據庫中已有條目,則跳過該記錄。」如果我們先清除它們,這些值將會丟失。 –

+0

我不知道可以這樣說。這取決於現有數據是否相同,哪一個沒有明確說明,並且從性能角度來看,對於較大的結果集,截斷和批量操作會快得多。 –