Entity Framework目前是否支持Where子句中的自定义函数?

时间:2012-10-15 21:34:11

标签: .net entity-framework

实体框架目前支持SSDL中定义的表值函数和自定义函数,但我在where子句中找不到任何用作条件的示例。

示例:

var query = this.db.People;
query = query.Where(p => FullText.ContainsInName(p.Id, "George"));

在此示例中,ContainsInName是我想要在查询的where子句中执行的自定义函数。

是否支持?

2 个答案:

答案 0 :(得分:0)

它不支持这样的功能。也就是说,如果您只是想查看p.Id是否在您发送的某个字符串中,您可以这样做:

query.Where(p => "George".Contains(p.Id));

请注意,String.Contains需要stringchar进行比较。如果p.Idint,您可以执行以下操作:

query.Where(p => "George".Contains(p.Id.ToString()));

这将在数据库级别运行查询。

答案 1 :(得分:0)

  1. 找出您的架构命名空间。在XML编辑器中打开.edmx,你会在顶部找到类似的东西

    `<Schema Namespace="My.Project.Name.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas...
    
  2. 将您的功能导入架构。

  3. 使用静态函数创建静态类

    public static class FullText
    {
        [EdmFunction("My.Project.Name.Store", "ContainsInName")]
        public static bool ContainsInName(int Id, string Name)
        {
            throw new NotImplementedException("You can only call this method as part of a LINQ expression");
        }
    }
    
  4. 然后像你的例子一样使用它:)

    不确定在where子句中使用表值函数。