2010-11-03 15 views
1

J'ai hava une datatable fortement typée et une liste (de String). Je veux construire une requête linq pour retourner une datable du même type où les champs d'une certaine colonne de la table sont dans la liste. Je pensais faire une jointure, bien qu'en sql normal j'aurais ajoutéLinq joindre typeddatatable avec List et retourner typeddatatable

SELECT FROM Table WHERE Table.ID IN(...); 

C'est ce que j'ai essayé dans linq.

Dim Families As List(Of String) 
Dim Articles As SomeStronglyTypedDataTable 


Dim MatchingArticles = From a In Articles.AsEnumerable _ 
      Join f In Families.AsEnumerable On a.FamilyCode Equals f.ToString _ 
      Select New With {} 

Je ne suis pas sûr non plus si je dois convertir le résultat de la requête de retour à une table de données, ni si c'est même possible.

Merci!

Répondre

0

Oui, vous pouvez le faire. Au lieu de Select New ..., sélectionnez les DataRows correspondantes, Select a, puis utilisez CopyToDataTable(Of T) sur les lignes correspondantes.

1

Essayez la requête plus simple:

Dim MatchingArticles = From a In Articles.AsEnumerable _ 
          Where Families.Contains(a.FamilyCode)_ 
          Select a 
    Dim MyMatchingArticlesTable = CopyToDataTable(Of SomeStronglyTypedDataTable) (MatchingArticles)
+0

Merci, c'est ce que j'ai fait à la fin mais parce que j'avais besoin de retourner une datation fortement typée j'ai utilisé la fusion: – kunguito

0
Dim table As DataTable = query.CopyToDataTable() 
     Dim typedtable As New TypedDataset.TypedDataTable 
     typedtable.Merge(table) 
0

Je ratissait mon cerveau essayant d'obtenir quelque chose de semblable au travail, et votre code m'a éclairé. Tout ce dont j'avais besoin était d'ajouter le .AsEnumerable() des deux côtés.

Je travaille avec C#. Quoi qu'il en soit, je pense que tout ce que vous devez faire est de sélectionner votre table comme

Dim MatchingArticles = From a In Articles.AsEnumerable _ 
     Join f In Families.AsEnumerable On a.FamilyCode Equals f.ToString _ 
     Select a; 

Eh bien, c'est un poste très vieux, mais bon, cela pourrait aider quelqu'un d'autre ... Si vous pensez que cela résoudrait votre question , veuillez le marquer comme correct, afin que les autres le sachent. Vous pouvez également marquer la réponse de Devart comme correcte. Je l'ai essayé et il fonctionne.