sql和实体的自定义Linq函数

时间:2012-12-17 16:24:56

标签: c# linq-to-sql linq-to-entities

有没有办法为linq to sql创建函数,这些函数在linq中用于实体时表现不同? 我不想使用AsQueriable。因为我想在sql服务器上做尽可能多的计算。

示例:

var UserIDs = Users.Select(x=> ConvertToString(x.UserID));

对于linq to sql,代码必须是:

public string ConvertToString(int id)
{
    return SqlFunctions.StringConvert((double?)id);
}

对于linq to entities,代码必须是:

public string ConvertToString(int id)
{
    return id.ToString();
}

2 个答案:

答案 0 :(得分:0)

您可以在Entity Framework 4及更高版本中使用SqlFunction。在您的示例中,您不必在应用程序层中进行转换。

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/05/23/calling-database-functions-in-linq-to-entities-in-entity-framework-4.aspx

答案 1 :(得分:0)

在Linq-to-Entites中,无论如何都不允许在查询中使用ConvertToString调用,所以这是一个勇敢而无果的努力。原因是L2E查询中的每个语句都必须是查询提供程序必须可以转换为SQL的表达式。并且(当然)没有任何方法的内置翻译。 L2E在这里非常有限。甚至不可能使用大多数原生.Net方法,如

Users.Select(x=> Convert.ToString(x.UserID)); // NotSupportedException

Linq-to-Sql在这方面稍微宽松一点。它会很好地运行声明。但这对你没有帮助,因为你正在寻找一个共同点。瓶颈是L2E,这是一个狭窄的瓶颈。