为什么Linq需要一个"只读"对象属性的setter?

Dic*_*eus 5 linq setter readonly executequery

我正在使用Linq DataContext.ExecuteQuery("some sql statement")来填充对象列表

var incomes = db.ExecuteQuery<IncomeAggregate>(sqlIncomeStatement(TimeUnit));
Run Code Online (Sandbox Code Playgroud)

IncomeAggregate是我用来保存此查询记录结果的对象.

YQM是该对象的一个​​属性:

public int Year { get; set; }
public int Quarter { get; set; }
public int Month { get; set; }

public string YQM 
{ 
    get { return string.Format("Y{0}-Q{1}-M{2}", Year, Quarter, Month); } 
}
... more properties
Run Code Online (Sandbox Code Playgroud)

一切都编译好,但当它执行Linq我得到以下错误:

无法为成员'YQM'分配值.它没有定义一个setter.

但显然,我不想"设定"它.Y,Q和M由查询提供给数据库.查询不提供YQM.我是否需要以某种方式更改对象的定义?(我刚开始使用Linq而且我还在加快速度,所以它可能非常简单)

Dic*_*eus 6

好吧,我终于结束了让私人制定者

public string YQM {
    get 
    { 
        return string.Format("Y{0}-Q{1}-M{2}", Year, Quarter, Month); 
    }

    private set { ;} 
}
Run Code Online (Sandbox Code Playgroud)

似乎工作.