如何在EF中执行标量用户定义函数

时间:2012-03-23 16:04:22

标签: tsql entity-framework-4

scalar udfs是否可以通过EF执行?

由于

2 个答案:

答案 0 :(得分:1)

是。这是支持,这里是如何快速了解如何做到这一点。

更改您的EF SSDL:

<Function Name="AvgStudentGrade" ReturnType="decimal" Schema="dbo" >
  <Parameter Name="studentId" Mode="In" Type="int" />
</Function>

添加具有适当属性的方法存根:

[EdmFunction("SchoolModel.Store", "AvgStudentGrade")]
public static decimal? AvgStudentGrade(int studentId)
{
    throw new NotSupportedException("Direct calls are not supported.");
}

使用它:

var students = from s in context.People
                   where s.EnrollmentDate != null
                   select new
                   {
                       name = s.LastName,
                       avgGrade = AvgStudentGrade(s.PersonID)
                   };

更多信息和完整样本:
http://msdn.microsoft.com/en-us/library/dd456847(VS.100).aspx

答案 1 :(得分:0)

假设您有一个名为MyDbSet的表,它可以是您想要的任何表。然后使用guid“ test”创建一条记录,然后使用下面的方法执行ef标量函数并返回结果。

MyDbSet
.Where(o => o.Guid == "test")
.Select(o => EF.Functions.ToTsVector(request.Keywords))
.FirstOrDefault();