Existe-t-il un moyen de convertir le résultat d'une expression LINQ en DataTable
sans passer par chaque élément?Comment convertir un résultat LINQ en DATATABLE?
3
A
Répondre
2
Non il n'y a aucun moyen de le créer sans en incrémentant à travers chaque élément. L'expression Linq est évaluée en cas de besoin afin qu'elle passe par chaque ligne (pour la correspondance et la sélection).
Je pense que vous devriez essayer d'utiliser DataTable.Select()
(MSDN link) méthode plutôt qu'il retourne un tableau de DataRow
objets que vous pouvez ajouter à la nouvelle table comme suit:
var rows = [ORIGINAL DATA TABLE].Select("id>5");
var dtb=[ORIGINAL DATA TABLE].Clone();
foreach(DataRow r in rows)
{
var newRow = dtb.NewRow();
newRow.ItemArray = r.ItemArray;
dtb.Rows.Add(newRow);//I'm doubtful if you need to call this or not
}
5
Crédit this blogger, mais je me suis amélioré sur son algorithme ici. Faites-vous une méthode d'extension:
public static DataTable ToADOTable<T>(this IEnumerable<T> varlist)
{
DataTable dtReturn = new DataTable();
// Use reflection to get property names, to create table
// column names
PropertyInfo[] oProps = typeof(T).GetProperties();
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
colType = colType.GetGenericArguments()[0];
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
foreach (T rec in varlist)
{
DataRow dr = dtReturn.NewRow();
foreach (PropertyInfo pi in oProps)
dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
dtReturn.Rows.Add(dr);
}
return (dtReturn);
}
Utilisation:
DataTable dt = query.ToADOTable();
Questions connexes
- 1. Convertir DataTable à LINQ
- 2. Convertir un jeu de résultats LINQ Query en un DataTable
- 3. Convertir Iqueryable en DataTable
- 4. Copier le résultat de Linq dans DataTable
- 5. Comment convertir une requête Linq en DataTable, DataSet ou DataView?
- 6. Comment convertir un DataTable/DataSet en ObjectDataSource
- 7. Convertir var en DataTable
- 8. Comment convertir un résultat MySQL en chaîne?
- 9. Convertir DataTable en LINQ: impossible d'interroger plusieurs champs
- 10. comment convertir liste datatable
- 11. filtrer un DataTable en utilisant LINQ
- 12. Comment convertir un DataTable en chaîne en C#?
- 13. C# convertir un tableau d'objets en datatable
- 14. Convertir DataTable en flux CSV
- 15. Comment convertir datatable en type générique
- 16. Comment convertir un sélecteur linq en prédicteur
- 17. Convertir DataTable en liste générique?
- 18. comment convertir Gridview à Datatable
- 19. comment extraire Datatable ou DataSet de Linq Query ou Liste
- 20. comment convertir DataTable Liste <String> en C#
- 21. Comment convertir un résultat WebService typé ObjectProxy en XML?
- 22. ADO.NET: convertir un DataTable en un tableau de DataRows
- 23. Comment transformer un résultat de requête Linq en XML?
- 24. Comment convertir datatable en chaîne json en utilisant json.net?
- 25. distinct ef4, convertir un sql en linq
- 26. Convertir un tableau d'octets dans une colonne datatable en chaîne?
- 27. Problème VB.NET convertir DataTable en JSON
- 28. Comment convertir un DataTable en IEnumerable <Dictionary <string, object >>?
- 29. DataTable linq query itération
- 30. Comment convertir Linq en SQL en Linq Entity?
Je reçois cette erreur lorsque vous utilisez votre code: « CS0121: L'appel est ambigu entre les méthodes ou les propriétés suivantes: "Savez-vous comment résoudre ceci? Merci pour le code cependant, +1 –
Phil
@Phil - ne peut pas dire à moins que vous postez le texte d'erreur complet, qui devrait contenir une référence aux deux méthodes concurrentes. Ensuite, vous saurez quelle autre méthode a la même signature. –
C'est la chose ... c'est la même signature pour eux deux. Vraiment étrange! Quoi qu'il en soit, voici la signature, quelques noms en suédois. Si vous ne savez pas directement, je vais juste poster une question à ce sujet. Message d'erreur: CS0121: L'appel est ambigu entre les méthodes ou propriétés suivantes: 'Gruppkoll.App_Code.ConvertToDataTableFromLinqResult.ToADOTable (System.Collections.Generic.IEnumerable )' et 'Gruppkoll.App_Code. ConvertToDataTableFromLinqResult.ToADOTable (System.Collections.Generic.IEnumerable ) ' –
Phil