L'interrogation d'une Table de données à l'aide de LINQ
D'abord toutes mes excuses si je n'ai pas l'expliquer correctement, ce que j'ai fait cela pendant des heures, et c'est désormais le matin.
J'ai essayé beaucoup de méthodes, a obtenu autant d'erreurs que je ne me souviens pas de la version originale, je ne peux pas résoudre le problème, voici mon code, c'est terrible comme je devrais être à l'aide d'une requête de jointure de mon SP sont buggé sur ce serveur.
SqlConnection conn = new SqlConnection(connstring);
DataSet ds = new DataSet();
SqlDataAdapter ad;
SqlCommand cmd = new SqlCommand();
ad = new SqlDataAdapter("SELECT * FROM booking WHERE bookstartdate BETWEEN '" + ReturnDbDate(datefrom).ToString() + "' AND '" + ReturnDbDate(dateto).ToString() + "'", conn);
ad.Fill(ds, "CustomerIds");
ad = new SqlDataAdapter("SELECT customerid, firstname, lastname, telephone, email FROM customer", conn);
ad.Fill(ds, "Customers");
DataTable dt = new DataTable();
dt.Columns.Add("Customerid", typeof(String));
dt.Columns.Add("Firstname", typeof(String));
dt.Columns.Add("Lastname", typeof(String));
dt.Columns.Add("Telephone", typeof(String));
dt.Columns.Add("Email", typeof(String));
int lol = ds.Tables["CustomerIds"].Rows.Count;
foreach (DataRow row in ds.Tables["CustomerIds"].Rows)
{
IEnumerable<DataRow> r = from dr in ds.Tables["Customers"].AsEnumerable()
where dr.Field<Guid>("customerid").ToString() == row[2].ToString()
select dr;
dt.Rows.Add(r);
}
return dt;
Quand j'ai essayer de faire une boucle par les données, en utilisant les suivantes:
foreach (DataRow rows in dt.Rows)
{
sb.Append("<tr><td>" + rows["Customerid"].ToString() + "</td><td>" + rows[1] + "</td><td>" + rows[2] +"</td><td>" + rows[3] + "</td></tr>");
}
J'obtiens:
Système.Les données.EnumerableRowCollection`1[Système.Les données.DataRow]
Personne des idées? Complètement en état de mort cérébrale atm donc il pourrait être quelque chose de simple.
Grâce
Edit:
DataRow r = from dr in ds.Tables["Customers"]
where dr.Field<Guid>("customerid").ToString() == row[2].ToString()
select dr;
dt.ImportRow(r);
Erreur: impossible de trouver une mise en œuvre du modèle de requête pour le type de source de "Système".Les données.DataTable". "Où" est introuvable.
Je suis en supposant que ma syntaxe LINQ n'est pas faux, même si je pense qu'il y a un IEnumberable<T>.Where()
méthode? Je m'en souviens, juste ne me souviens pas comment y accéder.
Edit2:
Je ne, a réussi à recréer à nouveau le problème, soupir
IEnumerable<DataRow> r = from dr in ds.Tables["Customers"].Select().Where(x => x.Field<Guid>("customerid").ToString() == row[2].ToString())
select dr;
dt.ImportRow(r);
Ok, merci, je l'ai eu.
OriginalL'auteur Ash | 2011-05-14
Vous devez vous connecter pour publier un commentaire.
dt.Rows.Add()
prend dans unDataRow
mais votre fournirIEnumerable<DataRow>
Notez également que les lignes ne peut être ajouté à un
DataTable
qui a été créé avecdt.NewRow()
essayez d'utiliserdt.ImportRow()
au lieuEDIT:
Passez le temp DataTable et joindre deux tables de données dans le dataset à la place.
Ou encore mieux, passez à l'aide de linq et joindre les tables dans la base de données de la requête à la place.
Plaine SQL
Je t'aime tellement maintenant lol, ne se rendent pas compte inline rejoindre les instructions sql sont possibles. Problème résolu
OriginalL'auteur Magnus
N'oubliez pas
sinon, vous ne pouvez pas utiliser ni LINQ méthode d'extension.
Essayer ceci:
IEnumerable<DataRow> r = ds.Tables["Customers"].AsEnumerable();
Utiliser toute extension LINQ méthode contre elle:
Votre ADO.NET code plutôt mieux pourrait ressembler à ceci:
OriginalL'auteur abatishchev