实体框架目前支持SSDL中定义的表值函数和自定义函数,但我在where
子句中找不到任何用作条件的示例。
示例:
var query = this.db.People;
query = query.Where(p => FullText.ContainsInName(p.Id, "George"));
在此示例中,ContainsInName
是我想要在查询的where
子句中执行的自定义函数。
是否支持?
答案 0 :(得分:0)
它不支持这样的功能。也就是说,如果您只是想查看p.Id
是否在您发送的某个字符串中,您可以这样做:
query.Where(p => "George".Contains(p.Id));
请注意,String.Contains
需要string
或char
进行比较。如果p.Id
是int
,您可以执行以下操作:
query.Where(p => "George".Contains(p.Id.ToString()));
这将在数据库级别运行查询。
答案 1 :(得分:0)
找出您的架构命名空间。在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
子句中使用表值函数。