0

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

例子:

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

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

是否支持?

4

2 回答 2

0

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

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

注意String.Contains取一个stringorchar来比较。如果p.Idint,您可以这样做:

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

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

于 2012-10-15T21:39:19.353 回答
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");
        }
    }
    

然后像在你的例子中一样使用它:)

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

于 2012-10-16T03:44:10.350 回答