Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MethodExpressionAttribute on properties does not work #349

Open
thtp opened this issue Mar 5, 2015 · 5 comments
Open

MethodExpressionAttribute on properties does not work #349

thtp opened this issue Mar 5, 2015 · 5 comments

Comments

@thtp
Copy link

thtp commented Mar 5, 2015

I have the following test code:

    [MapIgnore]
    [MethodExpression("GetClientExpression")]
    public string ClientName
    {
        get
        {
            return GetClienName.Value(this);
        }
    }

    [MethodExpression("GetClientExpression")]
    public string GetClientName()
    {
        return GetClienName.Value(this);
    }

    private static readonly Lazy<Func<Project, string>> GetClienName = new Lazy<Func<Project, string>>(() => GetClientExpression().Compile());

    private static Expression<Func<Project, string>> GetClientExpression()
    {
        Expression<Func<Project, string>> expression = project => project
            .OwnerOrganization
            .OrganizationClientLinkups
            .Where(linkup => linkup.IsPrimaryFlag == "Y")
            .Select(linkup => linkup.Client.ClientName)
            .FirstOrDefault();
        return expression;
    }

GetClientName method works just fine.
ClientName property throws an exceptions with message "Property 'System.String IsPrimaryFlag' is not defined for type 'Data.Model.Project'"

@ili ili closed this as completed in aab194b Mar 22, 2015
@thtp
Copy link
Author

thtp commented Mar 23, 2015

Можно я по-русски?
Исключение возникает, если в экспрешене присутствует Where или FirstOrDefault с условием.
То есть, если из приведенного куска кода убрать
.Where(linkup => linkup.IsPrimaryFlag == "Y")
то маппинг работает и для свойств, и для методов.
Но с Where(x => ...) или FirstOrDefault(x => ...) работает только для метода.

@ili
Copy link
Collaborator

ili commented Mar 23, 2015

ааа... видать я что-то не то починил :)))

@ili ili reopened this Mar 23, 2015
@ili
Copy link
Collaborator

ili commented Mar 23, 2015

так конкретно какой код-то сломается... дай пример пжл...

@ili
Copy link
Collaborator

ili commented Mar 23, 2015

в смысле пример запроса

@thtp
Copy link
Author

thtp commented Mar 23, 2015

Код в первом посте и есть пример.

Expression<Func<Project, string>> expression = project => project
.OwnerOrganization
.OrganizationClientLinkups // коллекция многие-ко-многим
.Where(linkup => linkup.IsPrimaryFlag == "Y") // Без вот этой строчки все работает отлично
.Select(linkup => linkup.Client.ClientName)
.FirstOrDefault();

Вот такое выражение работает, если использовать его с методом:

[MethodExpression("GetClientExpression")]
public string GetClientName()
{
    return GetClienName.Value(this);
}

Но не работает, если использовать с полем:

[MapIgnore]
[MethodExpression("GetClientExpression")]
public string ClientName
{
    get
    {
        return GetClienName.Value(this);
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants