.net MVC3 сущность глубоко сравнить на Где - PullRequest
0 голосов
/ 17 сентября 2011

Мой код для контроллера:

public ViewResult Index(int? ProjectID)
    {
        var user = HttpContext.User;
        User profile = db.Users.Where(d => d.Email == user.Identity.Name).Single();
        var contracts = db.Contracts.Include(c => c.Project);
        if (!user.IsInRole("Admin"))
        {
            contracts = contracts.Where(p => p.Project.Client == profile.Client );
        }

        if (ProjectID != null)
        {
            contracts = contracts.Where(u => u.ID == ProjectID);
        }

        return View(contracts.ToList());
    }

Предполагается, что вы получите все контракты, родительский проект которых имеет тот же клиент fk, что и пользователь, вошедший в данный момент, если они не являются администратором. Это не работает

Я получаю следующую ошибку, когда не администратор смотрит на страницу:

Невозможно создать постоянное значение типа 'MembershipExt.Models.Client. Только примитивные типы (такие как Int32, String и Guid ') поддерживаются в этом контексте.

Нужно ли использовать второе включение или что-то еще?

Ответы [ 3 ]

2 голосов
/ 17 сентября 2011

Какой тип данных для p.Project.Client?Я предполагаю, что это сложный тип (у него есть свойства от него).Возможно, вам нужно что-то вроде этого ...

contracts = contracts.Where(p => p.Project.Client.ClientID == profile.Client.ClientID );

Очевидно, я не знаю, как выглядит объект, но, возможно, это помогает.

1 голос
/ 17 сентября 2011
contracts = contracts.Where(p => p.Project.Client == profile.Client );

Я предполагаю, что проблема в вышеприведенной строке: правая часть лямбды должна быть простого типа int32, string и т. Д., Но у вас сложный тип, например p.Project.Client

1 голос
/ 17 сентября 2011

Это выглядит неправильно

db.Users.Where(d => d.Email == user.Identity.Name)

похоже, что вы сравниваете электронную почту с именем

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