只支持初始化器、实体成员和实体导航属性.(ASP.. NET MVC和实体框架)

本文关键字:实体 ASP NET MVC 框架 属性 导航 支持 成员 初始化 | 更新日期: 2023-09-27 18:10:40

我被困在我的ASP的某个地方。. NET MVC 3 app.这是我得到的错误:

不支持指定的类型成员'AccommPropertyTags'LINQ到实体。只有初始化式、实体成员和实体支持导航属性

我在下面的文章中找到了解决这个问题的方法:

只支持初始化式、实体成员和实体导航属性

但是我的有点奇怪。

这是我的实体的部分类之一:

[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,实体正试图将我的AccommPropertyTags属性转换为SQL,不能,因为它不是表模式的一部分。

我真的被困在这里了吗,还是有一个很酷的方法来打败这个烦人的错误?

只支持初始化器、实体成员和实体导航属性.(ASP.. NET MVC和实体框架)

您的问题与您链接的问题相似。在使用Where之前先调用model.ToList()。这将迫使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);
}