是否使用sql视图将linq转换为sql OnLoaded()?

是否使用sql视图将linq转换为sql OnLoaded()?,linq,linq-to-sql,extension-methods,Linq,Linq To Sql,Extension Methods,我正试图用一些额外的属性将我的Linq扩展到Sql实体。这些是基于基础SQL视图中的数据的“计算”属性。例如,假设有一个出生日期字段,用于计算扩展年龄字段 我试图通过扩展onload()方法来扩展实体类 我得到一个编译时错误,但是声明我不能创建它。我检查了LTS实体类的设计器代码,它没有任何预期扩展点的部分定义 我检查了一些其他LTS实体类,它们确实有这些扩展点。我看到的唯一区别是,没有的是从SQL视图加载的,而不是从表加载的。当从SQL视图加载时,是否有方法钩住“已加载”事件 蒂亚 您可以通过

我正试图用一些额外的属性将我的Linq扩展到Sql实体。这些是基于基础SQL视图中的数据的“计算”属性。例如,假设有一个出生日期字段,用于计算扩展年龄字段

我试图通过扩展onload()方法来扩展实体类

我得到一个编译时错误,但是声明我不能创建它。我检查了LTS实体类的设计器代码,它没有任何预期扩展点的部分定义

我检查了一些其他LTS实体类,它们确实有这些扩展点。我看到的唯一区别是,没有的是从SQL视图加载的,而不是从表加载的。当从SQL视图加载时,是否有方法钩住“已加载”事件


蒂亚

您可以通过属性来实现这一点。只需创建一个与实体同名的分部类。您添加的任何属性或方法都将自动成为实体的一部分,并允许使用其任何成员

下面是一个模式示例:

public partial class [The Name of the Entity]
{
   public int Age
   {
      get
      {
         return CalculateAge(this.DateOfBirth);
      }
   }
}
这里有一些关于如何计算年龄的逻辑(来源:)

publicstaticintcalculateage(日期时间出生日期)
{
int YearsPassed=DateTime.Now.Year-生日.Year;
//我们今年是在出生日期之前吗?如果是的话,从组合中减去一年
if(DateTime.Now.Month
我发现没有为我的Linq to Sql实体类指定PrimaryKey。我相信如果没有指定主键,实体类中就不会生成扩展方法。一旦我在LTS实体类定义中指定了主键(通过设计器),我就能够扩展onload()事件。

是的,我试图避免这种情况,因为我所做的计算实际上比计算年龄要多,我希望避免每次调用属性时都要重新计算。我知道我可以通过检查来绕过这个问题,首先看看年龄是否已经计算出来,但我希望不必用各种“if(myValue!=null)”检查来“污染”我的代码。
public static int CalculateAge(DateTime BirthDate)
{
    int YearsPassed = DateTime.Now.Year - BirthDate.Year;
    // Are we before the birth date this year? If so subtract one year from the mix
    if (DateTime.Now.Month < BirthDate.Month || 
          (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day))
    {
        YearsPassed--;
    }
    return YearsPassed;
}