我创建了一个新的查询,如下所示
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并用会话变量(此处未显示)的新主体替换主体内容,但不将其保存到db中。我希望只在实体中过滤和更新pressData。因此,当我将它绑定到控件时在这种情况下,它绑定了存储在会话中的数据。
this.rptSections.DataSource = pressData;
this.rptSections.DataBind();
我得到一个编译器错误陈述属性或索引器"匿名类型#1"。Body'不能赋值——它是只读的。
我检查了实体模型,没有任何东西是只读的,没有任何字段,没有任何东西。我一定错过了什么?
匿名类型封装了一个只读属性集合——更多信息,请阅读这里。编译器将匿名类型重写为构造函数注入,例如:
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,便于比较)。如果您想要解决您的问题,而不是获取数据并创建一个匿名对象,而是创建一个真正的类型并在其上设置属性。