Est-il possible d’utiliser des fonctions sql de buillt-in comme user_name () dans une requête LINQ? Si non, puis-je utiliser autre chose?
Cela dépend du fournisseur. Par exemple, dans LINQ to Entities contre SQL Server, vous pouvez utiliser SqlFunctions
, qui possède une méthode UserName
qui correspond à USER_NAME()
dans Transact-SQL. (Il existe de nombreuses autres méthodes et propriétés. Pour l’utilisateur actuel, vous pouvez simplement utiliser la propriété CurrentUser
, par exemple.)
Extension à @jon Skeet answer
SqlFunctions Class – Fournit des méthodes CLR (common language runtime) appelant des fonctions dans la firebase database dans les requêtes LINQ to Entities.
Comment utiliser
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); } }
Pour: méthode SqlFunctions.UserName, utilisez SqlFunctions.UserName ()
Voici MSDN: Comment: appeler des fonctions de firebase database personnalisées
Fonction personnalisée ajoutée
[EdmFunction("SchoolModel.Store", "AvgStudentGrade")] public static decimal? AvgStudentGrade(int studentId) { throw new NotSupportedException("Direct calls are not supported."); }
Dans la requête Linq
var students = from s in context.People where s.EnrollmentDate != null select new { name = s.LastName, avgGrade = AvgStudentGrade(s.PersonID) };