Entity Framework - linq и нулевые значения - PullRequest
1 голос
/ 16 ноября 2011

Я хотел бы выбрать TeamMembers и, если возможно, связанный пользователь.

public IEnumerable<RetailersFiveTeamMember> GetRetailersFiveTeamMembers(int retailLeaderID)
    {
        var members = this.EntityDataModel.DD_RetailersFiveTeamMember.Where(d => d.CMS_User1.UserID == retailLeaderID)
            .Select(d => new RetailersFiveTeamMember
        {
            DateCreated = d.DateCreated,
            Email = d.Email,
            User = new CMSUser() { UserEnabled = d.CMS_User.UserEnabled }
        }).ToArray();

        return members;

Если я выполню этот запрос, я получу следующую ошибку (которая ожидается, потому что CMS_User может быть нулевым):

Приведение к типу значения Boolean не выполнено, поскольку материализованное значение равно null. Либо универсальный параметр типа результата, либо запрос должен использовать обнуляемый тип.

Тогда я попробовал это с этим фрагментом кода:

User = d.CMS_User == null ? null : new CMSUser() { UserEnabled = d.CMS_User.UserEnabled }

Тогда я получаю это исключение:

Невозможно создать постоянное значение типа MsRetailClub.Core.Entities.RetailersFive.CMSUser. В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid).

Может кто-нибудь показать мне правильный способ сделать это? Большое спасибо!

1 Ответ

1 голос
/ 16 ноября 2011

Я думаю, что дело не в том, что значение d.CMS_User равно нулю (я думаю, что исключение будет что-то вроде «Ссылка на объект и т. Д.»), Но d.CMS_User.UserEnabled равно нулю.

Это произойдет, если соответствующее поле базы данных имеет логическое значение NULL.Затем вы можете либо сопоставить его с логическим значением NULL в C # (bool?), либо использовать значение по умолчанию для нулей.

Я предлагаю изменить определение CMSUser для использования

public bool? UserEnabled {get; set;}

но вы также можете сделать

...
User = new CMSUser()
{
  UserEnabled = d.CMS_User.UserEnabled ?? false;
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...