Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей. (ASP.NET MVC и Entity Framework) - PullRequest
5 голосов
/ 08 октября 2011

Я застрял где-то в моем приложении ASP.NET MVC 3. вот ошибка, которую я получаю:

Указанный член типа 'AccommodationmPropertyTags' не поддерживается в LINQ to Entities. Только инициализаторы, члены сущности и сущности свойства навигации поддерживаются.

Я нашел, как мы можем решить эту проблему в следующей статье:

Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей

Но мой немного странный.

Вот один из частичных классов моей сущности:

[MetadataType(typeof(AccommPropertyWebDetail.MetaData))]
public partial class AccommPropertyWebDetail {

    public virtual ICollection<string> AccommPropertyTags {

        get {

            return Helpers.AccommPropertyTag.CreateStringListFromString(this.PropertyTags);
        }
    }

    private class MetaData {

        [Required, StringLength(50)]
        public string Category { get; set; }

    }
}

Как вы можете видеть выше, свойство AccommPropertyTags имеет тип ICollection<string>. Внутри моего контроллера я пытаюсь сделать следующее:

public ViewResult Tag(string tag) {

    var _rawTag = HttpUtility.UrlDecode(tag);

    ViewBag.Tag = _rawTag;

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus();

    model = model.Where(
            x => x.AccommPropertyTags.Any(
                    y => y == _rawTag
                )
        );

    return View(model);
}

Из-за того, что я использую Any, Entity пытается преобразовать мое AccommPropertyTags свойство в SQL и не может, потому что оно не является частью схемы таблицы.

Я действительно застрял здесь или есть крутой способ справиться с этой досадной ошибкой?

1 Ответ

10 голосов
/ 08 октября 2011

Ваша проблема похожа на вопрос, который вы связали.Позвоните model.ToList() перед использованием Where.Это заставит EF материализовать сущности, а затем применить оставшуюся фильтрацию в памяти.

public ViewResult Tag(string tag) {

    var _rawTag = HttpUtility.UrlDecode(tag);

    ViewBag.Tag = _rawTag;

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus();

    var result = model.ToList().Where(
            x => x.AccommPropertyTags.Any(
                    y => y == _rawTag
                )
        );

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