是否可以在LINQ查询中使用内置的sql函数,如user_name()?如果没有,我可以使用其他东西吗?
答案 0 :(得分:7)
这取决于提供商。例如,在针对SQL Server的LINQ to Entities中,您可以使用SqlFunctions
- 其中UserName
方法对应于Transact-SQL中的USER_NAME()
。 (还有许多其他方法和属性。例如,对于当前用户,您可以使用CurrentUser
属性。)
答案 1 :(得分:3)
扩展到@jon Skeet回答
SqlFunctions Class - 提供公共语言运行时(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 Method
使用SqlFunctions.UserName ()
这是MSDN: How to: Call Custom Database Functions
添加了自定义功能
[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)
};