Cela dépend du fournisseur. Par exemple, dans LINQ to entities par rapport à SQL Server, vous pouvez utiliser SqlFunctions - qui a une nom d'utilisateur méthode qui correspond à NOM_UTILISATEUR() dans les instructions Transact-SQL. (Il existe de nombreuses autres méthodes et propriétés. Pour l'utilisateur actuel, vous pouvez simplement utiliser le CurrentUser de la propriété, par exemple.)
J'obtiens une erreur. Voici mon code snippet - DataContext dataContext = new DataContext("conn string"); Table<Customer> customers = dataContext.GetTable<Customer>(); var b = from c in customers where SqlFunctions.CharIndex("r", c.Name) == 0 select c.Name; var v = b.ToString(); Cette résultats dans la suite de l'erreur dans la dernière ligne - Method 'System.Nullable``1[System.Int32] CharIndex(System.String, System.String)' has no supported translation to SQL. Cela semble sans rapport avec cette question, et doit être demandé dans un autre post. Je vous remercie pour l'aimable suggestion Jon. J'ai posté une nouvelle question ici : stackoverflow.com/questions/37814449/... SqlFunctions méthodes ne fonctionnent pas pour Linq to Sql des requêtes. Linq to Sql ne sais pas comment ces méthodes carte pour les fonctions SQL, et c'est pourquoi il lance cette exception.
SqlFunctions Classe - Fournit common language runtime (CLR) méthodes d'appeler des fonctions dans la base de données dans les requêtes LINQ to entities.
Comment utiliser
using(AdventureWorksEntitiesAWEntities=newAdventureWorksEntities()){//SqlFunctions.CharIndex is executed in the database.var contacts =from c inAWEntities.ContactswhereSqlFunctions.CharIndex("Si", c.LastName)==1select c;foreach(var contact in contacts){Console.WriteLine(contact.LastName);}}
Créer une fonction personnalisée dans votre base de données.
Déclarer une fonction dans le magasin langage de définition de schéma (SSDL) de votre .fichier edmx. Le nom de la fonction doit être le même que le nom de la fonction déclarée dans la base de données.
Ajouter une méthode à une classe dans le code de votre application et d'appliquer un EdmFunctionAttribute à la méthode de Noter que la NamespaceName et FunctionName paramètres de l'attribut sont le nom d'espace de noms du modèle conceptuel et le nom de la fonction dans le modèle conceptuel, respectivement. La fonction de résolution de nom pour LINQ est sensible à la casse.
Appeler la méthode dans une requête LINQ to entities.
Ajouté la fonction Personnalisée
[EdmFunction("SchoolModel.Store","AvgStudentGrade")]publicstaticdecimal?AvgStudentGrade(int studentId){thrownewNotSupportedException("Direct calls are not supported.");}
Dans la requête Linq
var students =from s in context.Peoplewhere s.EnrollmentDate!=nullselectnew{
name = s.LastName,
avgGrade =AvgStudentGrade(s.PersonID)};
Je suis en train de faire un simple linq to sql à l'aide de DataContext classe. Cette approche n'implique aucun fichier EDMX. Comment puis-je utiliser votre approche pour faire appel à mon définis par l'utilisateur les fonctions de sql server?
Cela dépend du fournisseur. Par exemple, dans LINQ to entities par rapport à SQL Server, vous pouvez utiliser
SqlFunctions
- qui a unenom d'utilisateur
méthode qui correspond àNOM_UTILISATEUR()
dans les instructions Transact-SQL. (Il existe de nombreuses autres méthodes et propriétés. Pour l'utilisateur actuel, vous pouvez simplement utiliser leCurrentUser
de la propriété, par exemple.)DataContext dataContext = new DataContext("conn string"); Table<Customer> customers = dataContext.GetTable<Customer>(); var b = from c in customers where SqlFunctions.CharIndex("r", c.Name) == 0 select c.Name; var v = b.ToString();
Cette résultats dans la suite de l'erreur dans la dernière ligne -Method 'System.Nullable``1[System.Int32] CharIndex(System.String, System.String)' has no supported translation to SQL.
Cela semble sans rapport avec cette question, et doit être demandé dans un autre post.
Je vous remercie pour l'aimable suggestion Jon. J'ai posté une nouvelle question ici : stackoverflow.com/questions/37814449/...
SqlFunctions méthodes ne fonctionnent pas pour Linq to Sql des requêtes. Linq to Sql ne sais pas comment ces méthodes carte pour les fonctions SQL, et c'est pourquoi il lance cette exception.
OriginalL'auteur Jon Skeet
MODIFIER
Extension @jon Skeet réponse
SqlFunctions Classe - Fournit common language runtime (CLR) méthodes d'appeler des fonctions dans la base de données dans les requêtes LINQ to entities.
Comment utiliser
Pour : SqlFunctions.Nom D'Utilisateur De La Méthode
utilisation
SqlFunctions.UserName ()
Voici MSDN :
Procédure: Appel Personnalisé Fonctions de Base de données
Ajouté la fonction Personnalisée
Dans la requête Linq
DataContext
classe. Cette approche n'implique aucun fichier EDMX. Comment puis-je utiliser votre approche pour faire appel à mon définis par l'utilisateur les fonctions de sql server?OriginalL'auteur Pranay Rana