1

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

例子:

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

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

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

对于 linq to 实体,代码必须是:

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

2 回答 2

0

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

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

Linq-to-Sql 在这方面要宽松一些。它将体面地运行该语句。但这对您没有帮助,因为您正在寻找一个共同点。瓶颈是 L2E,它是一个狭窄的瓶颈。

于 2012-12-17T21:46:38.957 回答
0

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

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

于 2012-12-17T16:26:48.317 回答