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);
C'est un cas de la comparaison des données de deux dataset tables, et la création d'une nouvelle table de données et de les remplir avec le conditionnel de données ci-dessus
Ok, merci, je l'ai eu.

OriginalL'auteur Ash | 2011-05-14