只支持初始化器、实体成员和实体导航属性.(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,不能,因为它不是表模式的一部分。
我真的被困在这里了吗,还是有一个很酷的方法来打败这个烦人的错误?
您的问题与您链接的问题相似。在使用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);
}