我创建了一个新的查询,如下所示
var pressData = from press in dataContext.Releases
select new
{
Heading = press.Heading,
Description = press.Desc,
DatePublished = press.PublishDate.ToString(),
Body = press.BodyContent,
ID=press.ReleaseID,
CreatedBy=press.CreatedBy
};
稍后在代码中我想从会话变量更新实体,但不将任何数据保存回数据库。这是我试图通过....来实现这个代码。
var edit = pressData.Where(a => a.Heading == sectionPreview.HeadingContent && a.ID == sectionPreview.tionID).FirstOrDefault();
if (edit != null)
{
//WONT LET ME UPDATE THE Body VALUE
edit.Body = sectionPreview.SectionContent;
}
以上代码的目的是查看pressData并使用会话变量(此处未显示)中的新主体替换正文内容,但不将其保存到数据库中。我希望仅在实体中过滤和更新pressData。所以当我在这种情况下将它绑定到控件时,它会绑定存储在我的会话中的数据。
this.rptSections.DataSource = pressData;
this.rptSections.DataBind();
我得到一个编译错误说明 属性或索引器'AnonymousType#1.Body'无法分配 - 它是只读的。
我检查了实体模型,没有任何内容只读取任何字段而不是任何字段。我一定错过了什么?
答案 0 :(得分:2)
匿名类型封装了只读属性集 - 有关更多信息,请阅读here。编译器将匿名类型重写为构造函数注入,即:
select new
{
Heading = press.Heading,
Description = press.Desc,
DatePublished = press.PublishDate.ToString(),
Body = press.BodyContent,
ID=press.ReleaseID,
CreatedBy=press.CreatedBy
};
真的改写为:
new Anonymous`1(press.Heading, press.Desc, press.PublishDate.ToString(), press.BodyContent, press.ReleaseID, press.CreatedBy)
属性是只读的(public get,private / protected set,使用简单的比较)。如果要解决问题,而不是获取数据并创建匿名对象,请创建实际类型并在其上设置属性。