Время ожидания динамических бросков LINQ .Contains() истекло. Ошибка

Привет, ребята,
я работаю над этим запросом, чтобы экспортировать некоторые данные из базы данных sql 2008 на веб-сайте vb.net 3.5. Я использую динамический linq после исходного запроса, чтобы отфильтровать результаты по дате, штату, стране, специальности и принадлежности к больнице.

Каждый из этих фильтров имеет единственное значение в запросе. За исключением принадлежности к больнице, которая имеет список, разделенный запятыми. например: OSUMC, Западная больница, Восточная больница

При фильтрации мне нужно сделать .Contains, чтобы увидеть, содержит ли список с разделителями-запятыми конкретную больницу. пример: (OSUMC, HospitalWest, Hospital East).contains("OSUMC")

Если я делаю фильтр по дате, штату, стране и специальности, запрос выполняется отлично. Однако, если я добавлю фильтр для принадлежности к больнице, который является фильтром .Contains(), я получаю ошибки тайм-аута.

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает.

Dim ctx As New OSUMCEntities
    Dim query = (From ca As OSUMCModel.vw_ConferenceAttendance In ctx.vw_ConferenceAttendance Select New With _
                                                                                                     { _
                                                                                                         .LastName = ca.LastName, _
                                                                                                         .FirstName = ca.FirstName, _
                                                                                                         .UserID = ca.UserID, _
                                                                                                         .UserName = ca.Username, _
                                                                                                         .Degree = ca.DegreeName, _
                                                                                                         .Specialty = ca.Specialty, _
                                                                                                         .Profession = ca.Profession, _
                                                                                                         .HospitalAffiliations = ca.HospitalAffiliations, _
                                                                                                         .Address1 = ca.MailingAddress1, _
                                                                                                         .Address2 = ca.MailingAddress2, _
                                                                                                         .City = ca.MailingCity, _
                                                                                                         .State = ca.MailingState, _
                                                                                                         .ZipPostal = ca.MailingZip, _
                                                                                                         .Country = ca.MailingCountry, _
                                                                                                         .ConferenceID = ca.ConfID, _
                                                                                                         .Title = ca.Title, _
                                                                                                         .Date = ca.StartDate, _
                                                                                                         .MaxCredits = ca.Credits, _
                                                                                                         .CreditsAwarded = ca.CreditHours, _
                                                                                                         .CreditsAssignedOn = ca.AssignedOn, _
                                                                                                         .LastUpdated = ca.LastUpdate _
                                                                                                     })
    If (txtDateStart.Text <> "" And txtDateEnd.Text <> "") Then
        Dim StartDate As Date = txtDateStart.Text
        Dim EndDate As Date = txtDateEnd.Text
        query = query.Where("(Date >= @0 And  Date <=@1)", StartDate, EndDate)
    ElseIf (txtDateStart.Text <> "") Then
        Dim StartDate As Date = txtDateStart.Text
        query = query.Where("Date >= @0", StartDate)
    ElseIf (txtDateEnd.Text <> "") Then
        Dim EndDate As Date = txtDateEnd.Text
        query = query.Where("Date <= @0", EndDate)
    End If
    If (ddlState.SelectedValue <> "Export All") Then
        query = query.Where("State = @0", ddlState.SelectedValue)
    End If
    If (ddlCountry.SelectedValue <> "Export All") Then
        query = query.Where("Country = @0", ddlCountry.SelectedValue)
    End If
    If (ddlSpecialty.SelectedValue <> "Export All") Then
        query = query.Where("Specialty = @0", ddlSpecialty.SelectedValue)
    End If
    If (ddlHospitals.SelectedValue <> "Export All") Then
        Dim Hospital As String = ddlHospitals.SelectedValue
        query = query.Where("HospitalAffiliations.Contains(@0)", Hospital)
    End If

person Rob Carroll    schedule 17.12.2010    source источник
comment
попробуйте использовать .Any вместо .Contains.   -  person RPM1984    schedule 18.12.2010
comment
.Any не работает со строковым параметром.   -  person Rob Carroll    schedule 18.12.2010


Ответы (1)


проанализируйте запрос, который Linq выполняет на сервере sql, и проверьте время в профилировщике sql.

person Andrei Andrushkevich    schedule 17.12.2010
comment
Gallmy, спасибо за ответ, не могли бы вы рассказать мне, как получить запрос sql и как запустить его в профилировщике. Я никогда не делал этого раньше. - person Rob Carroll; 18.12.2010
comment
пожалуйста, просмотрите следующие ссылки для получения дополнительной информации thereforesystems.com/ представление-запрос-генерация-by-linq-to-sql thereforesystems.com/ - person Andrei Andrushkevich; 18.12.2010
comment
Galimy, я использую тот же запрос в другой функции, но с меньшим количеством переменных, я использую только принадлежность к больнице и идентификатор пользователя, и .contains работает нормально. Это происходит только тогда, когда у меня есть все эти другие переменные. Почему это может привести к сбою при содержании, но не приводит к сбою ни одного из операторов равенства в динамическом linq. - person Rob Carroll; 18.12.2010
comment
Вы должны знать, какой именно запрос выполняется в sql-сервере. И попробуйте направить его в студию управления SQl. Это поможет вам понять проблему. Это может быть очень сложно и медленно выполнять запрос для sql, или это может быть проблема с отображением данных из sql в Entity или что-то еще. - person Andrei Andrushkevich; 18.12.2010
comment
Galimy, я попытался найти запрос в режиме визуального дизайна студии. Но он продолжает давать мне объяснение анонимной переменной, я использую vb.net. Есть ли другой способ получить запрос, я использую SQL Server Express, поэтому у меня нет профилировщика SQL. Мои настоящие вопросы заключаются в том, почему это хорошо для всех равных операций, но не для операции contains. - person Rob Carroll; 19.12.2010