Динамический LINQ. Нет свойства или поля 'FieldName' в типе 'ClassName' - PullRequest
2 голосов
/ 15 ноября 2011

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

Dim Query = From t In New XPQuery(Of xUser)(Xpo.Session.DefaultSession)
.Where("Name=John").Select("new (Name as FirstName)")

К сожалению я получаю ошибку No property or field 'John' exists in type 'xUser'

Конечно, в моем классе xUser такого свойства не существует, но можно ли это исправить?

После прочтения в классе DynamicLinq я нашел эту функцию

Function FindPropertyOrField(ByVal type As Type, ByVal memberName As String, ByVal staticAccess As Boolean) As MemberInfo
    Dim flags As BindingFlags = BindingFlags.Public Or BindingFlags.DeclaredOnly Or _
        If(staticAccess, BindingFlags.Static, BindingFlags.Instance)
    For Each t As Type In SelfAndBaseTypes(Type)
        Dim members As MemberInfo() = t.FindMembers(MemberTypes.Property Or MemberTypes.Field, _
            flags, type.FilterNameIgnoreCase, memberName)
        If members.Length <> 0 Then Return members(0)
    Next
    Return Nothing
End Function

Как я могу отредактировать мой "ошибочный" запрос? Что я здесь не так делаю?

Спасибо за ваше время.

Ответы [ 2 ]

7 голосов
/ 15 ноября 2011

Попробуйте установить 'John' в качестве параметра, а не прямо в строке.

Здесь вы можете найти некоторую документацию, которая показывает это.Это будет выглядеть как .Where("Name=@0", "John")

4 голосов
/ 15 ноября 2011

Это должно быть .Where("Name='John'") (кавычки вокруг строки).

В качестве альтернативы вы можете использовать параметр: .Where("Name=@0", "John")

...