为什么 Linq 需要一个“只读”设置器?对象属性?

发布于 2024-11-25 09:43:31 字数 712 浏览 1 评论 0原文

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

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,并且仍在加快速度,所以它可能非常简单)

I'm using a Linq DataContext.ExecuteQuery("some sql statement") to populate a list of objects

var incomes = db.ExecuteQuery<IncomeAggregate>(sqlIncomeStatement(TimeUnit));

The IncomeAggregate is an object I made to hold the result of the records of this query.

One of the properties of this object is 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

Everything compiles OK, but when it executes the Linq I get the following error:

Cannot assign value to member 'YQM'. It does not define a setter.

But clearly, I don't want to 'set' it.
Y, Q and M are provided by the query to the database. YQM is NOT provided by the query.
Do I need to change the definition of my object somehow?
(I've just started using Linq and I'm still getting up to speed, so it could be very simple)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你又不是我 2024-12-02 09:43:31

好吧,我最终只是将设置器设为私有

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

    private set { ;} 
}

似乎有效。

Well, I finally wound up just making the setter private

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

    private set { ;} 
}

Seems to work.

合久必婚 2024-12-02 09:43:31

Linq 假设该对象的属性是从数据库加载的值,并且显然它无法设置YQM属性,因为它没有设置器。尝试使 YQM 成为一种方法:

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

Linq is assuming that the properties of this object are values to load from the database, and clearly it can't set the YQM property because it has no setter. Try making YQM a method instead:

public string YQM() 
{ 
    return string.Format("Y{0}-Q{1}-M{2}", Year, Quarter, Month);  
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文