9

在将结果集绑定到对象时,如何告诉 LINQ 数据上下文忽略特定属性或所有只读属性?

我正在处理一些使用 LINQ 难以表达的 T-SQL 语句,因此我使用数据上下文的 ExecuteQuery 方法将直接的 T-SQL 传递给数据库。

如果我的类 T 具有任何只读属性,那么当数据上下文尝试设置这些属性并且由于没有 setter 属性而失败时,我会在运行时遇到异常。如何告诉上下文忽略这些属性?

这就是我现在正在做的事情。它有效,但很糟糕:

public bool IsPaidInFull {
    get { return NetTotal <= 0m; }
    set { /* needed so linq doesn't choke. Should never be set by hand */ }
}
4

2 回答 2

1
public bool IsPaidInFull
{
    get { return NetTotal <= 0m; }
    private set { ;}
}
于 2013-01-17T21:52:46.877 回答
0

您是否考虑过 Linq to Entity?转换你的项目可能不值得麻烦,这取决于你走了多远,或者你对多少 orm 开销感到满意。但是,这种确切的情况在 Linq to Entities 中不会成为问题。它在加载对象时不会尝试更新对象中的只读属性,因为它们没有显式映射,它们只是扩展属性。

此外,您可以使用 getter 函数而不是属性来走老派/java 路线。public bool getIsPaidInFull(){return NetTotal <= 0m;}。

或者您可以尝试在继承的子类中实现只读属性,但这可能会引入各种类型问题。

于 2009-05-06T16:42:21.363 回答