使用DataContext.ExecuteQuery <t> </t>时忽略只读类属性

时间:2009-04-01 23:16:16

标签: .net linq linq-to-sql datacontext

在将结果集绑定到对象时,如何告诉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 */ }
}

2 个答案:

答案 0 :(得分:1)

public bool IsPaidInFull
{
    get { return NetTotal <= 0m; }
    private set { ;}
}

答案 1 :(得分:0)

您是否考虑过Linq to Entities?转换项目可能不值得,取决于你的距离,或者你感到舒适的开销。但是,这个确切的场景在Linq to Entities中不会成为问题。它在加载时不会尝试更新对象中的只读属性,因为它们没有显式映射,它们只是扩展属性。

此外,您可以使用getter函数而不是属性来使用old-school / java路由。 public bool getIsPaidInFull(){return NetTotal&lt; = 0m;}。

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