Quelqu'un a-t-il une liste complète des méthodes et méthodes d'extension LINQPad, telles que
.Dump()
SubmitChanges()
c#
.net
entity-framework
linq-to-sql
linqpad
Bent Rasmussen
la source
la source
Réponses:
LINQPad définit deux méthodes d'extension (dans LINQPad.Extensions), à savoir
Dump()
etDisassemble()
.Dump()
écrit dans la fenêtre de sortie à l'aide du formateur de sortie de LINQPad et est surchargé pour vous permettre de spécifier un en-tête:Vous pouvez également spécifier une profondeur de récursivité maximale pour remplacer la valeur par défaut de 5 niveaux:
Disassemble () désassemble toute méthode en
IL
, retournant la sortie dans une chaîne:En plus de ces deux méthodes d'extension, il existe des méthodes statiques utiles dans LINQPad.Util. Ceux-ci sont documentés dans la saisie semi-automatique et comprennent:
LINQPad fournit également la classe HyperLinq. Cela a deux objectifs: le premier est d'afficher des hyperliens ordinaires:
Vous pouvez combiner cela avec
Util.HorizontalRun
:Résultat:
Le deuxième objectif d'HyperLinq est de créer dynamiquement des requêtes:
Vous pouvez également écrire vos propres méthodes d'extension dans LINQPad. Allez dans «Mes requêtes» et cliquez sur la requête intitulée «Mes extensions». Tous les types / méthodes définis ici sont accessibles à toutes les requêtes:
En 4.46 (.02), de nouvelles classes et méthodes ont été introduites :
En outre, la classe Hyperlinq prend désormais en charge un délégué Action qui sera appelé lorsque vous cliquez sur le lien, ce qui vous permet de réagir dans le code et pas seulement de créer un lien vers des pages Web externes.
DumpContainer
est une classe qui ajoute un bloc dans la fenêtre de sortie dont le contenu peut être remplacé.REMARQUE! N'oubliez pas de vous
.Dump()
-DumpContainer
même à l'endroit approprié.Utiliser:
OnDemand
est une méthode d'extension qui ne sortira pas le contenu de son paramètre dans la fenêtre de sortie, mais ajoutera à la place un lien cliquable qui, une fois cliqué, remplacera le lien par le.Dump()
contenu ed du paramètre. C'est parfait pour les structures de données parfois nécessaires qui sont coûteuses ou prennent beaucoup de place.REMARQUE! N'oubliez pas
.Dump()
les résultats de l'appelOnDemand
à l'endroit approprié.Pour l'utiliser:
Util.ProgressBar
est une classe qui peut afficher une barre de progression graphique dans la fenêtre de sortie, qui peut être modifiée au fur et à mesure que le code avance.REMARQUE! N'oubliez pas de
.Dump()
placer l'objet Util.ProgressBar à l'endroit approprié.Pour l'utiliser:
la source
Outre la bien connue
myQuery.Dump("Query result:")
, une autre caractéristique à mentionner est laUtil
classe: elle contient de nombreuses méthodes assez pratiques (dont certaines que j'ai mentionnées, mais il y en a beaucoup plus).Il est également intéressant de pouvoir modifier le
Dump()
fonctionnement .Enfin, je vais vous montrer comment vous pouvez rendre les modifications permanentes (c'est-à-dire insérer, mettre à jour, supprimer des requêtes LINQ) en utilisant
SubmitChanges()
ouSaveChanges()
ainsi que comment vous pouvez accéder à l'objet de connexion interne de LinqPad.Et pour arrondir, je vais vous montrer comment créer un graphique 2D simple à l' intérieur de LinqPad (dessin de lignes, de bitmaps ou de fonctions ).
Alors, voici une collection de fonctionnalités LinqPad intégrées (de ma propre expérience avec l'outil):
.Déverser()
(paramètres disponibles dans LinqPad v5.03.08 et supérieur)
Tous les utilisateurs de LinqPad connaissent et aiment la
.Dump()
méthode d'extension, qui consomme et imprime (presque) tout.Mais saviez-vous qu'il existe quelques paramètres disponibles? Jetez un œil à cet extrait de code:
Le 1er exemple n'imprime que les variables
a
etc
et masqueb
etd
, le 2ème exemple fait l'inverse (notez qu'il ne spécifie que 2 des paramètres disponibles). Les variablesy
etz
ne peuvent pas être masquées individuellement, car elles ne sont pas au niveau supérieur.Les paramètres suivants sont disponibles ( tous sont facultatifs ):
description
[string] - fournit une description de l'objet à viderdepth
[int?] - limite la profondeur à laquelle les objets sont inspectés récursivementtoDataGrid
[booléen] - si true, la sortie est formatée comme une grille de données plutôt que comme RichTextexclude
[chaîne] - si vous fournissez une liste de variables séparées par des virgules, elles seront exclues de la sortie (dans l'exemple "a, c":b
etd
sont affichées,a
etc
sont masquées)exclude
[chaîne] avec le préfixe "+" - le préfixe inverse la logique du paramètre d'exclusion. Cela signifie que si vous fournissez une liste de variables séparées par des virgules, toutes sauf celles spécifiées sont masquées (dans l'exemple "+ b, d":b
etd
sont affichées, toutes les autres masquées)var x=Util.ToExpando(obj, "a, c", "b, d"); x.Dump();
La première chaîne contient une liste de propriétés à inclure, la deuxième chaîne une liste à exclure
.OnDemand("click me").Dump();
place de.Dump()
, il affichera un lien sur lequel vous pouvez cliquer pour développer Utile si vous voulez inspecter les valeurs, par exempleUtil.OnDemand("Customer-ID: " + customerObject.ID.ToString(), ()=>customerObject, false).Dump();
pour toujours afficher l'ID par défaut mais révéler les détails decustomerObject
seulement si cela vous intéresse.Des sujets plus avancés sur Dump peuvent être trouvés ici et là .
Environnement
Ce n'est pas une extension LinqPad, mais plutôt une classe .NET, mais comme c'est utile, je le mentionnerai quand même. Vous pouvez obtenir de nombreuses informations utiles que vous pouvez utiliser dans vos scripts, telles que:
NB Pour obtenir
Domain\UserName
j'utiliseraisSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
plutôt que
Environment.UserDomainName+@"\"+Environment.UserName
.Util.WriteCsv
( nouveau: disponible depuis la version LinqPad v4.45.05 (beta) )
Cela écrira le contenu de la table
Customers
dans le fichier CSVc:\temp\customers.csv
. Vous pouvez également trouver un bel exemple sur la façon d'utiliserUtil.WriteCsv
et d'afficher les données CSV dans la fenêtre de résultats de Linqpad ici .Conseils:
Pour obtenir / créer un fichier CSV qui se trouve dans le même répertoire que la requête, vous pouvez utiliser:
var csvFile=Util.CurrentQueryPath.Replace(".linq", ".csv");
Si la table est volumineuse, utilisez
ObjectTrackingEnabled = false;
avant d'écrire le CSV pour éviter de le mettre en cache en mémoire.Si vous souhaitez générer un tableau au format XML plutôt que sous forme de fichier séparé par des virgules, vous pouvez le faire comme:
Cet exemple renvoie tous les éléments ayant l'attribut
attr1
qui contient la valeur"a"
d'un fichier XML qui porte le même nom que la requête et est contenu dans le même chemin. Consultez ce lien pour plus d'exemples de code.Util.GetPassword
Cela récupérera le mot de passe du gestionnaire de mots de passe intégré de LinqPad. Pour créer et modifier le mot de passe, ouvrez l' élément de menu "Gestionnaire de mots de passe" dans le menu "Fichier" de LinqPad. S'il n'y a pas de mot de passe enregistré lorsque vous exécutez le code C #, une boîte de dialogue de mot de passe s'ouvrira vous demandant le mot de passe et vous avez le choix de le créer et de l'enregistrer à la volée en cochant la case Enregistrer le mot de passe (dans l'exemple, le mot de passe pour "UserXY" serait enregistré, et plus tard vous pouvez trouver cette entrée dans le gestionnaire de mots de passe ).
Les avantages sont que vous pouvez stocker le mot de passe dans les LinqScripts que vous créez en toute sécurité, séparément et chiffré dans le profil utilisateur de Windows (il est stocké dans
%localappdata%\LINQPad\Passwords
un fichier). LinqPad utilise Windows DPAPI pour protéger le mot de passe.De plus, le mot de passe est stocké de manière centralisée, donc si vous devez le changer, vous pouvez le faire dans le menu et il s'applique immédiatement à tous les scripts que vous avez créés.
Remarques:
Si vous ne souhaitez pas enregistrer le mot de passe et afficher simplement une boîte de dialogue de mot de passe, vous pouvez utiliser le 2ème paramètre comme suit:
var pwd = Util.GetPassword("UserXY", true);
Cela décochera la case à cocher Enregistrer le mot de passe dans la boîte de dialogue de mot de passe (cependant, l'utilisateur peut toujours le vérifier et choisissez de sauvegarder quand même).
Si vous avez besoin que le mot de passe soit stocké dans a
SecureString
, vous pouvez utiliser cette fonction d'aide (nb: pour obtenir la méthode d'extension.ToSecureString()
utilisée, veuillez suivre ce lien sur Stackoverflow - il vous permet également de le reconvertir si nécessaire):System.Security.SecureString GetPasswordSecure(string Name, bool noDefaultSave=true)
{
return Util.GetPassword(Name, noDefaultSave)
.ToSecureString();
}
Util.Cmd
Cette méthode fonctionne comme un processeur de commandes. Vous pouvez appeler toutes les commandes que vous connaissez à partir de la console Windows.
Exemple 1 - dir:
Cela affichera le résultat du répertoire sans qu'il soit nécessaire
.Dump
. Le stocker dans une variable a l'avantage que vous pouvez utiliser d'autres requêtes Linq dessus. Par exemple:Cela videra tous les fichiers avec les extensions de fichier ".exe" ou ".dll" contenus dans
C:\windows\system32
. Le/s
commutateur est utilisé pour récurer tous les sous-répertoires et/b
est utilisé pour le format de sortie nu. Notez que le deuxième paramètre de la méthode Cmd est spécifié pour supprimer la sortie de la console afin d'afficher uniquement le résultat filtré à l'aide de la méthode Dump.Vous pouvez voir que cela est plus flexible que les caractères génériques que vous avez
dir
car vous pouvez utiliser toute la flexibilité du moteur de requête de Linq.Exemple 2 - éditeur de texte:
Vous pouvez ouvrir un fichier dans le Bloc-notes comme ceci:
Util.Image
Affiche les images d'une URL. Exemple:
Util.ProgressBar, Util.Progress
L'utilisation
Util.ProgressBar
vous permet d'afficher une barre de progression. Vous pouvez utiliser la classe d'assistance suivante:Utilisez-le simplement comme le montre l'exemple suivant:
Vous pouvez également utiliser
Util.Progress
pour mettre à jour la barre de progression intégrée des LinqPads, par exemple:La différence est qu'il ne s'affichera pas dans la fenêtre de résultats et vous ne pouvez pas lui attribuer de message.
Util.RawHtml
Affiche le HTML dans la fenêtre de sortie. Exemple:
Hyperlinq, Util.HorizontalRun
Vous pouvez utiliser cette fonction d'exemple
pour afficher les hyperliens dans la fenêtre de résultats - ou toute action comme l'ouverture de votre éditeur préféré. Usage:
Notez que cette fonction fonctionne toujours, alors
new Hyperlinq ("http://myURL", "Web site").Dump();
qu'elle ne fonctionne pas pour certains types d'URL (en particulier, si vous devez passer des noms de port comme ": 1234" dans le cadre de l'URL).Util.ReadLine
Lit l'entrée de la console. Exemple:
En tant que synonyme de
Util.ReadLine<string>()
, vous pouvez également utiliserConsole.ReadLine()
.Mais il y a plus! Vous pouvez créer un analyseur JSON simple avec l'extrait de code suivant - très utile, par exemple si vous souhaitez analyser et tester une chaîne JSON à la volée. Enregistrez l'extrait suivant sous le nom JSONAnalyzer.linq à l' aide d'un éditeur de texte , puis ouvrez-le dans LinqPad (c'est pour ajouter facilement les références à la volée):
Maintenant, vous pouvez l'exécuter et coller simplement une chaîne JSON du presse-papiers dans la console - il utilisera la
Dump
fonction pour l'afficher comme un objet bien - et vous obtenez également les messages d'erreur de l'analyseur à l'écran pour résoudre les problèmes. Très utile pour le débogage d'AJAX.Util.ClearResults
Si vous devez effacer la fenêtre de résultats dans votre script, utilisez:
Utilisez-le en haut de votre script, ou - si vous exécutez plusieurs requêtes dans un script - vous devez attendre l'entrée de l'utilisateur avant de vider l'écran (par exemple en le précédant de
Util.ReadLine
)..Dump personnalisé () - ICustomMemberProvider
Il est également intéressant de noter que vous pouvez modifier la sortie de la
.Dump()
méthode. Implémentez simplement l'interfaceICustomMemberProvider
, par exempleSi vous créez une instance de cette classe, comme
alors il affichera seulement
Hint
,constMember1
,constMember2
etmyprop
, mais pas la propriétéxyz
:Affichage d'un MessageBox ou InputBox dans LinqPad
Si vous devez afficher une boîte de message, regardez ici comment le faire.
Par exemple, vous pouvez afficher une InputBox à l'aide du code suivant
(n'oubliez pas d'appuyer sur F4 et d'ajouter Microsoft.VisualBasic.dll et ses espaces de noms pour que cela fonctionne)
Util.Run
( nouveau: disponible depuis la version LinqPad v4.52.1 (beta) )
Vous permet d'exécuter un autre script LINQPad à partir de votre script ou de votre propre programme .NET ou service Windows (en référençant la version LINQPad4-AnyCPU de
LINQPad.exe
). Il exécute le script comme lelprun.exe
ferait l' outil de ligne de commande .Exemples:
Cet exemple exécute le script
foo.linq
, qui contient l'exemple de code suivant:Il vous permet de vérifier si le script a été exécuté depuis l'intérieur de l'interface graphique LinqPad ou via
lprun.exe
ou avecUtil.Run
.Remarque: les variantes d'appel suivantes peuvent être utiles:
SubmitChanges () - Linq vers SQL
Si vous utilisez LinqToSQL , vous souhaiterez peut-être rendre les modifications permanentes (pour les opérations d' insertion / mise à jour / suppression ). Étant donné que le contexte de la base de données est implicitement créé par LinqPad, vous devez appeler
SubmitChanges()
après chaque modification comme indiqué ci-dessous.Exemples pour la base de données (LinqPad-) Northwind :
Insérer
Mettre à jour
Supprimer
Remarque: afin d'obtenir des identifiants valides pour les exemples précédents, vous pouvez utiliser:
avant de les invoquer.
SaveChanges () - Framework d'entité
Si vous utilisez Entity Framework , vous souhaiterez peut-être rendre les modifications permanentes également (pour les opérations d' insertion / mise à jour / suppression ). Étant donné que le contexte de la base de données est implicitement créé par LinqPad, vous devez appeler
SaveChanges()
après chaque modification comme indiqué ci-dessous.Les exemples sont fondamentalement les mêmes que précédemment pour LinqToSQL , mais vous devez les utiliser à la
SaveChanges()
place, et pour insérer et supprimer les méthodes ont également changé.Insérer
Mettre à jour
Supprimer
Remarque: afin d'obtenir des identifiants valides pour les exemples précédents, vous pouvez utiliser:
avant de les invoquer.
this - contexte de base de données
Dans LinqPad , le contexte de base de données est appliqué automatiquement en utilisant la zone de liste déroulante en haut et en sélectionnant la bonne base de données pour votre requête. Mais parfois, il est utile de le référencer explicitement, par exemple si vous copiez du code de votre projet hors de Visual Studio et le collez dans LinqPad.
Votre extrait de code extrait du projet Visual Studio ressemble très probablement à ceci:
Que faire maintenant
dc
? Bien sûr, vous pouvez supprimer chaque occurrence dedc.
dans votre requête, mais c'est beaucoup plus facile. Il suffit d'ajouteren haut de votre extrait de code comme ceci:
et le code fonctionnera instantanément!
this.Connexion
Utilisation de LinqPad avec OleDb, conversion d'une table de données en objet Linq, requêtes SQL dans Linq
L'extrait de code suivant vous aide à utiliser LinqPad avec OleDb. Ajoutez à
System.Data.OleDb
partir de l'System.Data
assembly aux propriétés de la requête, puis collez le code suivant dansMain()
:Ajoutez maintenant une connexion SqlServer à LinqPad et ajoutez la base de données Northwind afin d'exécuter cet exemple.
NB: Si vous souhaitez simplement obtenir la base de données et le serveur de la connexion actuellement sélectionnée, vous pouvez utiliser cet extrait de code:
Vous pouvez même convertir
myDS
en Linq, les réponses à la question suivante montrent comment le faire: Bons exemples d'utilisation du mot clé dynamique .NET 4 avec LinqUn autre exemple: supposons que votre DBA vous donne une requête SQL et que vous souhaitiez analyser les résultats dans LinqPad - bien sûr dans Linq, pas dans SQL. Ensuite, vous pouvez effectuer les opérations suivantes:
Dans cet exemple, la requête SELECT du DBA est simplement «jetée dans» le texte de la commande, et les résultats sont filtrés et classés par ville.
Bien sûr, ceci est un exemple simplifié, votre DBA vous donnerait probablement un script plus complexe, mais vous avez l'idée: ajoutez simplement une classe de résultat de prise en charge qui contient tous les champs de la clause SELECT et vous pourrez ensuite l'utiliser directement .
Vous pouvez même prendre le résultat d'une procédure stockée de cette façon et l'utiliser dans Linq. Comme vous pouvez le voir, dans cet exemple, je me fiche du type de données et de mon utilisation
dynamic
pour l'exprimer.Il s'agit donc vraiment de programmation rapide pour pouvoir analyser rapidement les données. Vous ne devriez pas faire cela dans votre application réelle pour diverses raisons (injection SQL, car vous pouvez utiliser EF depuis le début, etc.).
PanelManager
Dessiner un graphique dans LinqPad, partie 1
Pour utiliser les exemples ci - dessous, appuyez sur F4et ajouter
System.Windows.dll
,System.Windows.Forms.dll
,WindowsFormsIntegration.dll
,PresentationCore.dll
etPresentationFramework.dll
à votre programme LINQPad et également ajouter l'espace de nomsSystem.Windows.Shapes
.Le premier exemple trace simplement une ligne:
Le deuxième exemple montre comment afficher le graphique dans LinqPad à l'aide du PanelManager. Normalement, LinqPad ne prend en charge que les objets Wpf. Cet exemple utilise
System.Windows.Forms.Integration.WindowsFormsHost
pour rendre unWindows.Forms.PictureBox
disponible (il a été inspiré par ceci ):Cela créera le graphique suivant (les éléments de panneau "Graphique" et "Image" sont ajoutés par les exemples ci-dessus):
Si vous souhaitez afficher les images de la base de données Northwind, vous pouvez effectuer les opérations suivantes:
Modifiez le nom du fichier image en «NorthwindPics.jpg», puis ajoutez le code suivant au début de la méthode Main () du deuxième exemple :
Il lira le premier enregistrement de la table Employés et affichera l'image.
Consultez les liens suivants pour en savoir plus:
Formes et dessin de base dans les visualiseurs personnalisés WPF
LinqPad
Remarque: vous pouvez également obtenir la même chose sans PanelManager, comme le montre l'exemple suivant, que j'ai vu ici :
Il utilise la
.Dump()
commande pour l'afficher. Vous pouvez invoquerimage.Dump()
plusieurs fois et cela ajoutera l'image.Formulaires Windows
Dessiner un graphique dans LinqPad, partie 2
L'exemple suivant, inspiré de cet article, montre comment implémenter un traceur de fonctions simple dans Linqpad 5 en utilisant C # 7:
Il utilise la capacité de LinqPad pour afficher les formulaires Windows dans le panneau des résultats. Ajouter des références (presse ) : , , et ajouter tous les espaces de noms de ces assemblées.
F4
System.Drawing.dll
System.Windows.Forms.dll
System.Windows.Forms.DataVisualization.dll
Conseils supplémentaires / lectures complémentaires:
Vous souhaitez utiliser LinqPad dans Visual Studio ? Voici comment vous pouvez faire cela .
Besoin d'avoir LinqPad comme "application portable" ? Lisez ici comment faire cela.
Le site Web de Joe pour LinqPad est toujours une excellente source. Dans LinqPad,
Help -> What's New
vous donne des conseils sur les nouvelles fonctions et méthodes. Le forum LinqPad contient également des conseils utiles.Également très utile: cet article sur le débogage Linq (Pad).
À utiliser
lprun.exe
pour exécuter des requêtes LINQ dans vos scripts de commandes. Lisez cet article pour plus de détails. Par exemple:echo Customers.Take(100) > script.txt
lprun -lang=e -cxname=CompanyServer.CustomerDb script.txt
dans cet exemple, la requête est une simple expression LINQ. Bien sûr, vous pouvez également préparer des requêtes complexes en utilisant
-lang=program
pour activer le mode programme.Vous pouvez écrire des méthodes d'extension et les stocker dans l' onglet Mes requêtes sur le côté gauche de LinqPad: Le dernier élément de l'arborescence est nommé Mes extensions ; double-cliquez dessus pour ouvrir un fichier dans lequel vous pouvez écrire des extensions disponibles pour toutes vos requêtes. Mettez-les simplement dans la classe statique publique
MyExtensions
et utilisez laMain()
méthode pour inclure des tests pour vos extensions.la source
Dump est une méthode d'extension globale et SubmitChanges provient de l'objet DataContext qui est un objet System.Data.Linq.DataContext.
LP n'ajoute que Dump and Disassemble pour autant que je sache. Bien que je recommande vivement de l'ouvrir dans Reflector pour voir ce qu'il y a d'autre qui peut être utilisé. L'une des choses les plus intéressantes est l'espace de noms LINQPad.Util qui contient quelques avantages utilisés par LINQPad en interne.
la source
.Dump()
ou sur toute autre méthode dans l'éditeur de source, appuyez sur F12 pour "refléter". Ceci est maintenant intégré à l'outil!J'ai atteint la limite de texte StackOverflow dans ma réponse précédente , mais il y a encore plus d'extensions intéressantes dans LinqPad. Je voudrais mentionner l'un d'entre eux:
Fonctions JavaScript (utilisation
.Dump()
)Depuis la version 5.42 beta de LinqPad, vous pouvez intégrer des fonctions JavaScript et les appeler directement depuis votre code C #. Bien que cela ait quelques limitations (par rapport à JSFiddle), c'est un bon moyen de tester rapidement du code JavaScript dans LinqPad.
Exemple:
Dans cet exemple, une fonction
jsFoo
avec un paramètre est préparée et stockée dans la variableliteral
. Ensuite, il est rendu et appelé via.Dump().HtmlElement.InvokeScript(...)
, en passant le paramètretestparam
.La fonction JavaScript utilise
external.Log(...)
pour afficher du texte dans les fenêtres de sortie de LinqPad etalert(...)
pour afficher un message contextuel.Vous pouvez simplifier cela en ajoutant la classe / les méthodes d'extension suivantes :
Ensuite, vous pouvez appeler l'exemple précédent comme suit:
Cela a le même effet, mais est plus facile à lire (si vous avez l'intention de faire plus de JavaScript ;-)).
Une autre option, si vous aimez les expressions Lambda et que vous n'aimez pas spécifier le nom de la fonction sous forme de chaîne à chaque fois que vous l'appelez, vous pouvez faire:
à condition que vous ayez ajouté la fonction d'assistance
à la classe
ScriptExtension
. Cela résoudra le nom de variable que vous avez utilisé (icijsFoo
) qui se trouve être le même nom que la fonction JavaScript elle-même (notez comment l'expression lambda est utilisée pour résoudre le nom de la variable, cela ne peut pas être faitnameof(paramName)
à l'intérieur de la fonction)..Dump () - mise à jour d'un message en ligne
Parfois, il est utile d' écraser le texte que vous avez vidé plutôt que de le mettre dans une nouvelle ligne, par exemple si vous effectuez une requête de longue durée et que vous souhaitez afficher sa progression, etc. (voir également ProgressBar ci-dessous). Cela peut être fait en utilisant a
DumpContainer
, vous pouvez l'utiliser comme indiqué dans leExemple 1:
Notez que pour certains objets plus complexes, vous devrez peut-être utiliser
dc.UpdateContent(obj);
plutôt quedc.Content=...
.Exemple 2:
Util.ProgressBar
L'affichage de la progression peut également être effectué en utilisant une barre de progression comme suit:
Exemple:
Ceci est similaire à l'exemple de vidage précédent, mais montre cette fois une belle animation de barre de progression.
Test unitaire avec LinqPad - xUnit
Saviez-vous que vous pouvez écrire des tests unitaires dans LinqPad? Par exemple, vous pouvez utiliser le framework xUnit. Il est disponible via le support NUGET de LinqPad - via F4- dans le clic de dialogue Add NUGET..... Voici une description étape par étape de l' utilisation de xUnit avec LinqPad V5 ou V6.
Si j'en découvre plus, je mettrai à jour cette réponse
la source