EF проблема единой сущности - PullRequest
0 голосов
/ 14 апреля 2011

Мне нужно вернуть один экземпляр моего класса viewmodel из моего репозитория, чтобы передать это в строго типизированное представление

В моем репозитории это прекрасно работает для коллекции экземпляров viewmodel:

    IEnumerable<PAWeb.Domain.Entities.Section> ISectionsRepository.GetSectionsByArea(int AreaId)
    {
        var _sections = from s in DataContext.Sections where s.AreaId == AreaId orderby s.Ordinal ascending select s;

        return _sections.Select(x => new PAWeb.Domain.Entities.Section()
        {
            SectionId = x.SectionId,
            Title = x.Title,
            UrlTitle = x.UrlTitle,
            NavTitle = x.NavTitle,
            AreaId = x.AreaId,
            Ordinal = x.Ordinal
        }
        );
    }

Но когда я пытаюсь получить единую сущность, вот так:

    public PAWeb.Domain.Entities.Section GetSection(int SectionId)
    {
        var _section = from s in DataContext.Sections where s.SectionId == SectionId select s;

        return _section.Select(x => new PAWeb.Domain.Entities.Section()
        {
            SectionId = x.SectionId,
            Title = x.Title,
            UrlTitle = x.UrlTitle,
            NavTitle = x.NavTitle,
            AreaId = x.AreaId,
            Ordinal = x.Ordinal
        }
        );
    }       

Я получаю

Error   1   Cannot implicitly convert type  
'System.Linq.IQueryable<PAWeb.Domain.Entities.Section>' to 
'PAWeb.Domain.Entities.Section'. An explicit conversion exists 
(are you missing a cast?)"

Это должно быть просто, но я новичок в c #, и я не могу понять кастинг. Я пробовал (PAWeb.Domain.Entities.Section) в разных местах, но безуспешно. Может кто-нибудь помочь ??

1 Ответ

2 голосов
/ 14 апреля 2011

Ваш запрос возвращает IQueryable, который может содержать несколько элементов.Например, подумайте о разнице между массивом или списком объектов и одним объектом.Он не знает, как преобразовать список в один объект, какой он должен взять?Первый?Последний?

Вы должны указать это специально, чтобы взять только один предмет.

Например,

public PAWeb.Domain.Entities.Section GetSection(int SectionId)
    {
        var _section = from s in DataContext.Sections where s.SectionId == SectionId select s;

        return _section.Select(x => new PAWeb.Domain.Entities.Section()
        {
            SectionId = x.SectionId,
            Title = x.Title,
            UrlTitle = x.UrlTitle,
            NavTitle = x.NavTitle,
            AreaId = x.AreaId,
            Ordinal = x.Ordinal
        }
        ).FirstOrDefault();
    }  

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

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