Linq to SQL - Как проверить, что запись не существует перед вставкой - PullRequest
3 голосов
/ 08 мая 2010

Я работаю над небольшим дополнительным приложением для клиента, в котором они предоставляют мне список городов, и я должен вставить их в базу данных и связать их с их родительскими записями.

Пример:

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

Теперь мой код выглядит следующим образом

    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

Так что, в принципе, если Лос-Анджелес находится в файле TXT, я не хочу, чтобы он повторно вводился в базу данных, поскольку он уже существует.

Может кто-нибудь помочь мне выяснить, как проверить, существует ли запись до вставки?

Ответы [ 3 ]

2 голосов
/ 08 мая 2010

Образцы LINQ To SQL - EXISTS / IN / ANY / ALL

Public Sub LinqToSqlExists01()
    Dim q = From c In db.Customers _
            Where Not c.Orders.Any()

    ObjectDumper.Write(q)
End Sub
1 голос
/ 08 мая 2010
if (RegionDC.bt_Regions.Any(r => r.Region == input.ReadLine()))
{
    // Yes it exists
}
else
{
    // No it doesn't exist
}

Использовал конвертер для создания версии VB:)

If RegionDC.bt_Regions.Any(Function(r) r.Region = input.ReadLine()) Then
    ''# Yes it exists 
Else
    ''# No it doesn't exist 
End If
1 голос
/ 08 мая 2010

Предполагая, что ни одна запись не может иметь идентификатор 0, я думаю, что это просто вопрос проверки: q = 0.

Но я думаю, что у вас есть ошибка в коде: вы вызываете input.ReadLine() дважды на каждой итерации, поэтому вы проверяете, есть ли Лос-Анджелес в базе данных, а затем пытаетесь вставить Сан-Франциско. Просто захватите строку в переменной и затем используйте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...