where
实体框架目前支持 SSDL 中定义的表值函数和自定义函数,但我在子句中找不到任何将其用作条件的示例。
例子:
var query = this.db.People;
query = query.Where(p => FullText.ContainsInName(p.Id, "George"));
在此示例中,ContainsInName
是我希望在where
查询子句中执行的自定义函数。
是否支持?
where
实体框架目前支持 SSDL 中定义的表值函数和自定义函数,但我在子句中找不到任何将其用作条件的示例。
例子:
var query = this.db.People;
query = query.Where(p => FullText.ContainsInName(p.Id, "George"));
在此示例中,ContainsInName
是我希望在where
查询子句中执行的自定义函数。
是否支持?
它不支持这样的功能。也就是说,如果您只是想查看是否p.Id
在您发送的某个字符串中,您可以这样做:
query.Where(p => "George".Contains(p.Id));
注意String.Contains
取一个string
orchar
来比较。如果p.Id
是int
,您可以这样做:
query.Where(p => "George".Contains(p.Id.ToString()));
这将在数据库级别运行查询。
找出你的模式命名空间。在 XML 编辑器中打开 .edmx,您会在顶部找到类似这样的内容
`<Schema Namespace="My.Project.Name.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas...
将您的函数导入架构。
使用静态函数创建静态类
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
子句中使用表值函数。