Casting Linq to IEnumerable <Datarow - >
Ich bin erstellen winForm app,In diesem Onbutton auf ich Daten sammeln, Tabellen aus Beiden Datenbanken Mysql und Sqlite-Datenbank.
Ich erste Casting-Fehler beim auf-casting-Linq-Abfrage in IEnumerable zu machen fetch query-Werte DataTable, um die Anzeige im DataGrid anzeigen.
private void button1_Click(object sender, EventArgs e)
{
var obj = new table1TableAdapter(); //Mysql Table Adapter
var obj2 = new Table1TableAdapter(); //Sqlite Table Adapter
var ds = new DataSet();
ds.Tables.Add(obj.GetData());
ds.Tables.Add(obj2.GetData());
var tab1 = ds.Tables[0];
var tab2 = ds.Tables[1];
var query = from o in tab1.AsEnumerable()
join od in tab2.AsEnumerable()
on o.Field<string>("Name") equals od.Field<string>("Name")
select new
{
Name = o.Field<string>("Name"),
Rollno = od.Field<Int64>("rollno"),
Book = o.Field<string>("Book")
};
var q2 = (IEnumerable<DataRow>)query; //Unable to cast object of type <JoinIterator>
DataTable orderTable = q2.CopyToDataTable();
dataGridView1.DataSource = orderTable;
}
- Ist das nicht ein DataRow, und Sie können nicht magisch verwandeln Sie es in ein
DataRow
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf deinen code, würde ich sagen, warum werfe es
IEnumerable<DataRow>
überhaupt ? Einfach nur binden Sie die Abfrage, um Ihre GridView.Deswegen, weil das query-Objekt sind Sie wieder, hat keine Beziehung zu
DataRow
.query
wird ein IEnumerable<SomeAnonymousType>. Wie wird es erwartet, um zu konvertieren, umDataRow
?Müssten Sie ändern, um Ihre Aussage zu machen, eine DataRow:
Dann ist es nativ eine
IEnumerable<DataRow>
und braucht kein casting.Da Ihre Abfrage erstellen, die eine IEnumerable-Sie würden nicht in der Lage zu werfen es zu einer DataRow. Würde ich auch nicht raten, mit wählen Sie neue DataRow(/* Was auch immer Params /) { / Mehr Params */}; da dies nicht die Wahrheit sein, DataRow-Objekt und wäre eine schlechte Praxis.
Ich das handhaben würde, es auf diese Weise. Auch wenn dies ein kleines Projekt, es sollte nicht sein, dass viel code in der Button_Click-Ereignishandler.
Zunächst erstellen Sie ein container-Objekt, nennen es ein DTO oder ViewModel. Ich schlage vor, die später.
Als Nächstes erstellen Sie eine neue Klasse, die Ihre SQL-Abfragen. Dies wird trennen Sie Ihre Datenzugriffslogik-aus dem Formular-Logik.
Letzten, binden Sie die Liste auf Ihr display.
Nun, wenn Sie zurück gehen, um änderungen an Ihrem code, Sie werden leicht in der Lage zu ändern Sie Ihre display-Logik und ohne zu Lesen durch alle Ihre vermischten code.
Beispiel:
Für eine Sache, sind Sie nicht in der Lage sein zu Stimmen, um eine IEnumerable-denn du bist Abfrage selbst ist nicht die Herstellung von DataRows
ist die Schaffung eines anonymen Typs.
Müssten Sie dies ändern, um ein DataRow-irgendwie zuerst, und dann wandeln Sie es in ein IEnumerable.
Bin ich über folgende Aussage und das funktioniert für mich