是否可以在 LINQ 查询中使用像 user_name() 这样的内置 sql 函数?如果没有,我可以用别的东西吗?
问问题
20503 次
2 回答
7
这取决于提供者。例如,在针对 SQL Server 的 LINQ to Entities 中,您可以使用SqlFunctions
- 它具有UserName
对应USER_NAME()
于 Transact-SQL 中的方法。(还有很多其他的方法和属性,对于当前用户,你可以只使用CurrentUser
属性,例如。)
于 2012-07-26T06:22:21.173 回答
4
编辑
扩展到@jon Skeet 答案
SqlFunctions 类- 提供公共语言运行时 (CLR) 方法,这些方法在 LINQ to Entities 查询中调用数据库中的函数。
如何使用
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
// SqlFunctions.CharIndex is executed in the database.
var contacts = from c in AWEntities.Contacts
where SqlFunctions.CharIndex("Si", c.LastName) == 1
select c;
foreach (var contact in contacts)
{
Console.WriteLine(contact.LastName);
}
}
For : SqlFunctions.UserName 方法
使用SqlFunctions.UserName ()
这是 MSDN: 如何:调用自定义数据库函数
- 在您的数据库中创建一个自定义函数。
- 在 .edmx 文件的存储架构定义语言 (SSDL) 中声明一个函数。函数名必须与数据库中声明的函数名相同。
- 在应用程序代码中为类添加对应的方法并将 EdmFunctionAttribute 应用到方法注意,属性的 NamespaceName 和 FunctionName 参数分别是概念模型的命名空间名称和概念模型中的函数名称。LINQ 的函数名称解析区分大小写。
- 在 LINQ to Entities 查询中调用该方法。
添加自定义功能
[EdmFunction("SchoolModel.Store", "AvgStudentGrade")]
public static decimal? AvgStudentGrade(int studentId)
{
throw new NotSupportedException("Direct calls are not supported.");
}
在 Linq 查询中
var students = from s in context.People
where s.EnrollmentDate != null
select new
{
name = s.LastName,
avgGrade = AvgStudentGrade(s.PersonID)
};
于 2012-07-26T06:22:41.027 回答