如何:在查询中调用模型定义的函数

时间:2011-11-02 08:43:46

标签: entity-framework linq-to-entities entity-framework-4.1

我正在尝试执行以下操作: http://msdn.microsoft.com/en-us/library/dd456857.aspx

我在edmx文件中创建了函数,就在schema元素之前:

<Function Name="YearsSince" ReturnType="Edm.Int32">
  <Parameter Name="date" Type="Edm.DateTime" />
  <DefiningExpression>
    Year(CurrentDateTime()) - Year(AppliedDate)
  </DefiningExpression>
</Function>
      </Schema>

现在,我希望能够在查询中使用它。 我在ApplicantPosition分部类

中创建了以下代码
[EdmFunction("HRModel", "YearsSince")]
        public static int YearsSince(DateTime date)
        {
            throw new NotSupportedException("Direct calls are not supported.");
        }

我正在尝试进行以下查询

public class Class1
{

    public void question()
    {
        using (HREntities context = new HREntities())
        {
            // Retrieve instructors hired more than 10 years ago.
            var applicantPositions = from p in context.ApplicantPositions
                              where YearsSince((DateTime)p.AppliedDate) > 10
                              select p;

            foreach (var applicantPosition in applicantPositions)
            {
                Console.WriteLine(applicantPosition.);
            }
        }

    }
}

YearsSince未被识别,MSDN教程没有准确显示我需要放置函数的位置,因此这可能是我的问题。

1 个答案:

答案 0 :(得分:2)

必须在某个类中定义静态YearsSince函数,因此如果它不是Class1,则必须使用带有类名的完整标识来调用它。另请检查this answer