为什么Linq需要一个';只读';对象属性?

为什么Linq需要一个';只读';对象属性?,linq,readonly,setter,executequery,Linq,Readonly,Setter,Executequery,我使用LINQDataContext.ExecuteQuery(“一些sql语句”)来填充对象列表 var incomes = db.ExecuteQuery<IncomeAggregate>(sqlIncomeStatement(TimeUnit)); 一切编译都正常,但当它执行Linq时,我得到以下错误: 无法将值分配给成员“YQM”。它没有定义setter 但很明显,我不想“设置”它。 Y、 Q和M由数据库的查询提供。查询未提供YQM。 我是否需要以某种方式更改对象的定义?

我使用LINQDataContext.ExecuteQuery(“一些sql语句”)来填充对象列表

var incomes = db.ExecuteQuery<IncomeAggregate>(sqlIncomeStatement(TimeUnit));
一切编译都正常,但当它执行Linq时,我得到以下错误:

无法将值分配给成员“YQM”。它没有定义setter

但很明显,我不想“设置”它。 Y、 Q和M由数据库的查询提供。查询未提供YQM。 我是否需要以某种方式更改对象的定义? (我刚刚开始使用Linq,但我仍在加快速度,所以它可能非常简单)

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

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

好吧,我终于把二传定为私人了

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

    private set { ;} 
}

似乎有效。

我尝试的另一个选项是只放入一个“虚拟”setter:
私有集{;}
@JacksonPope:我希望找到一种方法让Linq知道is不必从数据库加载此值。在剩下的代码中,我更喜欢使用YQM作为属性。我还注意到,当我使用分部类向LinqToSql生成的类添加属性时,该分部类中可能只有一个getter。这个问题类似于。他们找到了相同的
私有集{;}
解决方案。
public string YQM {
    get 
    { 
        return string.Format("Y{0}-Q{1}-M{2}", Year, Quarter, Month); 
    }

    private set { ;} 
}