Анонимный тип, приведенный к AsQueryable из оператора if, а затем запрошенный - PullRequest
2 голосов
/ 02 ноября 2011

У меня есть оператор if, который возвращает результат в виде AsQueryable анонимному типу:

If (signature = "") Then
                testResults = (From TRTable In context.TestResults
                                        Where ((TRTable.Art_no = currentProduct) And (TRTable.Server_time > startDate) And (TRTable.Server_time < endDate))
                                        Select TRTable.Art_no, TRTable.Failed, TRTable.Retested).AsQueryable
            ElseIf (signInfo = "out") Then
                testResults = (From TRTable In context.TestResults
                                        Where ((TRTable.Art_no = currentProduct) And (TRTable.Server_time > startDate) And (TRTable.Server_time < endDate) And TRTable.Sign <> signature)
                                        Select TRTable.Art_no, TRTable.Failed, TRTable.Retested).AsQueryable
            Else
                testResults = (From TRTable In context.TestResults
                                        Where ((TRTable.Art_no = currentProduct) And (TRTable.Server_time > startDate) And (TRTable.Server_time < endDate) And TRTable.Sign = signature)
                                        Select TRTable.Art_no, TRTable.Failed, TRTable.Retested).AsQueryable
            End If

А потом, когда я делаю

StatisticsModel.Passed = testResults.Where(Function(p) p.Failed = 0).Count

, я получаю

Method invocation failed because 'Public Function Where(predicate As String, ParamArray parameters As System.Data.Objects.ObjectParameter()) As System.Data.Objects.ObjectQuery`1[[VB$AnonymousType_3`3[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable(Of VB$AnonymousType_3(Of String,Nullable(Of Decimal),Nullable(Of Decimal)))' cannot be called with these arguments:
Argument matching parameter 'predicate' cannot convert from 'VB$AnonymousDelegate_1(Of Object,Object)' to 'String'.

Извините за длинную строку текста, но я не могу понять, почему он не работает, он работал без оператора if, но мне нужна эта функциональность.Спасибо:)

1 Ответ

3 голосов
/ 02 ноября 2011

Вы пытаетесь использовать метод расширения System.Linq.Queryable.Where, но ваш код считает, что вы хотите System.Data.Objects.ObjectQuery.Where.

Убедитесь, что в верхней части файла указан правильный оператор Imports System.Linq.Если это не сработает, вам, возможно, придется напрямую позвонить System.Linq.Queryable.Where(testResults, ...).Count.Вы также можете использовать Count(predicate) вместо Where(predicate).Count, что также поможет избежать конфликта.

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