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

7
我正在使用Linq DataContext.ExecuteQuery("一些SQL语句")来填充对象列表。
var incomes = db.ExecuteQuery<IncomeAggregate>(sqlIncomeStatement(TimeUnit));
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

一切都编译正常,但当执行Linq时,我收到以下错误消息:
“无法为成员'YQM'分配值。它没有定义setter。”
但很明显,我不想“设置”它。 Y、Q和M由查询提供给数据库。 YQM不是由查询提供的。 我需要以某种方式更改对象的定义吗? (我刚开始使用Linq,还在适应中,所以可能非常简单)

我尝试的另一个选项是仅放置一个“虚拟”的setter:private set { ;} - Dick de Reus
@JacksonPope:我希望找到一种方法,让Linq知道它不必从数据库加载此值。在我的其余代码中,我更喜欢将YQM用作属性。 - Dick de Reus
我还注意到,当我使用部分类向 LinqToSql 生成的类添加属性时,仅在该部分类中具有 getter 是可行的 - Dick de Reus
这个问题看起来类似于这篇SO帖子。他们得到了相同的private set { ;}解决方案。 - ckittel
2个回答

7

好的,最终我决定将setter方法设置为私有的

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

    private set { ;} 
}

看起来能够工作。

1

Linq 假定此对象的 属性 是要从数据库加载的值,显然它无法设置 YQM 属性,因为它没有 setter。尝试将 YQM 改为方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接