Linq pas à sélectionner sur datatable
Salut j'ai 2 tables de données (bannedlist,countrylist), contient la liste des noms de pays et de morues dans les colonnes du cc et de pays. Je suis en train de faire une requête où je peux sélectionner les pays de countrylist table qui ne sont pas dans bannedlist d'une table afin de créer une 3ème table.
Des idées?
Je n'ai pas trop loin avec cette.
var ccList = ds.Tables[2].AsEnumerable();
var bannedCCList = ds.Tables[1].AsEnumerable();
var query = from r in ccList....
..
après avoir essayé
var bannedCCList = ds.Tables[1].AsEnumerable();
var query = from r in ccList where !bannedCCList.Any(b => b["cc"] == r["cc"])select r;
je reçois toujours la même liste de pays. banni ceux n'ont pas été supprimées. voici plus de détails afin d'expliquer plus. pas sûr de ce que je fais de mal
protected void BindCountryBan(string subd)
{
DataSet ds = new DataSet();
ds = new DB().CountryBan_GetSiteSettings();
BannedCountryListBox.DataSource = ds.Tables[1];
BannedCountryListBox.DataValueField = "cc";
BannedCountryListBox.DataTextField = "country";
BannedCountryListBox.DataBind();
//bind country list
var ccList = ds.Tables[2].AsEnumerable();
var bannedCCList = ds.Tables[1].AsEnumerable();
var query = from r in ccList where !bannedCCList.Any(b => b["cc"] == r["cc"])select r;
//var query = ccList.Except(bannedCCList);
//CountryListBox.DataSource = ds.Tables[2];
DataTable boundTable = query.CopyToDataTable<DataRow>();
CountryListBox.DataSource = boundTable;
CountryListBox.DataValueField = "cc";
CountryListBox.DataTextField = "country";
CountryListBox.DataBind();
}
Après re-thingkink mon problème j'ai relalised qu'au lieu de jouer andtrying pour faire le tri, en ajoutant une petite où ma requête sql "Select * from country_list où cc pas dans(sélectionnez cc de country_list_banned_countries où le sous-domaine=@sous-domaine ) commande par pays asc" j'ai pu extraire interdit de pays de pays de la liste sur le côté serveur et lier sans lutte. merci à tout le monde
OriginalL'auteur nLL | 2009-07-22
Vous devez vous connecter pour publier un commentaire.
Sauf si vous l'utilisez sur des séquences du pays:
Si vous avez besoin de la totalité des lignes où les pays ne sont pas interdits, vous pouvez essayer une jointure externe gauche:
Essayez de définir la zone de liste de propriétés de datatextfield et DataValueField valeurs pour les noms des champs que vous souhaitez lier. Vous ne devriez pas besoin de le copier à un tableau.
S'il vous plaît "dahlbyk" j'ai besoin de la deuxième code VB.Net j'ai troble avec la conversion avec "converter.telerik.com", grâce à addvance
OriginalL'auteur dahlbyk
Vous pouvez utiliser l'Exception() extension LINQ méthode comme ceci:
Toutefois, cela fonctionnera très bien avec le comparateur par défaut du type. Ainsi, si vous souhaitez utiliser une colonne spécifique, comme dans votre exemple, vous pourriez avoir besoin d'une autre approche comme:
À l'aide de l'Exception() implique les références sont les mêmes dans les deux collections, qui je pense n'est pas le cas avec des Tables, corrigez-moi si je me trompe.
OriginalL'auteur Sébastien Ros - MSFT
Essayez ceci:
Vous aurez besoin de: l'utilisation du Système.Linq;
quand je la lie de la requête à une zone de liste tout ce que j'obtiens est le Système.Les données.DataRow ressemble im encore fait quelque chose de mal
ok j'ai converti à datatable avec DataTable boundTable = requête.CopyToDataTable<DataRow>(); mais je ne suis pas usure c'est le meilleur moyen
Tout cela peut aussi être une solution, il est rapide pour moins d'enregistrements, tandis que lorsque la liste est comme 200k, cette méthode sera très lent
OriginalL'auteur Meta-Knight