Непонятки с LINQ #4 - Почему JOIN работает криво?
От: senglory  
Дата: 10.03.10 23:09
Оценка:
        Using sqlcn As SQLiteConnection = New SQLiteConnection(String.Format(CONNECTION_STRING_TEMPLATE, dbFilePath))
            Using sqlcnOff As SQLiteConnection = New SQLiteConnection(String.Format(Common.CONNECTION_STRING_TEMPLATE, Common.GetDBPathOffline()))
                Try
                    sqlcn.Open()
                    sqlcnOff.Open()
                    Dim SchemaTable = sqlcn.GetSchema(SQLiteMetaDataCollectionNames.Tables)
                    Dim SchemaTableOffline = sqlcnOff.GetSchema(SQLiteMetaDataCollectionNames.Tables)

                    Dim matchingTables = From s1 In SchemaTable.AsEnumerable().ToList() _
                                         Join s2 In SchemaTableOffline.AsEnumerable().ToList() On s1.Table.TableName Equals s2.Table.TableName

                    If matchingTables.Count() <> SchemaTable.Rows.Count Or matchingTables.Count() <> SchemaTableOffline.Rows.Count Then
                        result = DBTESTSRESULTS.DB_FILE_SCHEMA_MISMATCH
                        Return False
                    End If



SchemaTable.Rows.Count дает 5, SchemaTableOffline.Rows.Count тоже дает 5. Но почему matchingTables.Count() в результате 25?
Re: Непонятки с LINQ #4 - Почему JOIN работает криво?
От: Oyster Украина https://github.com/devoyster
Дата: 10.03.10 23:27
Оценка: 6 (1)
Здравствуйте, senglory, Вы писали:

S>SchemaTable.Rows.Count дает 5, SchemaTableOffline.Rows.Count тоже дает 5. Но почему matchingTables.Count() в результате 25?


Простой вопрос — у тебя случайно TableName не возвращает одно и то же значение (например, пустую строку) для всех элементов обеих коллекций? Потому что похоже на декартово произведение обеих коллекций, возможное в случае, если значения всех TableName равны.
Re[2]: Непонятки с LINQ #4 - Почему JOIN работает криво?
От: senglory  
Дата: 11.03.10 00:59
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Здравствуйте, senglory, Вы писали:


S>>SchemaTable.Rows.Count дает 5, SchemaTableOffline.Rows.Count тоже дает 5. Но почему matchingTables.Count() в результате 25?


O>Простой вопрос — у тебя случайно TableName не возвращает одно и то же значение (например, пустую строку) для всех элементов обеих коллекций? Потому что похоже на декартово произведение обеих коллекций, возможное в случае, если значения всех TableName равны.


Точно! Это как раз и было!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.