Próbuję uruchomić kwerendę linq, ale potrzebuję wyniku jako datatable, ponieważ używam go do przechowywania rekordów z różnych zapytań w tym samym obiekcie viewstate.Najszybszy sposób na wypełnienie DataTable z kwerendy LINQ przy użyciu DataContext
Dwie wersje poniżej kompilują, ale zwracają pusty zestaw. Dokładny błąd to "Wartość nie może być pusta Nazwa parametru: źródło". (I tak mam zaznaczone są dane):
MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
IEnumerable<DataRow> queryProjects =
(from DataRow p in db.STREAM_PROJECTs.AsEnumerable()
where p.Field<int>("STREAM_ID") == StreamID
select new
{
PROJECT_ID = p.Field<int>("PROJECT_ID"),
PROJECT_NAME = p.Field<string>("PROJECT_NAME")
}) as IEnumerable<DataRow>;
DataTable results = queryProjects.CopyToDataTable<DataRow>();
...
//(from p in db.STREAM_PROJECTs.AsEnumerable()
//where p.STREAM_ID == StreamID
//select new
//{
// p.PROJECT_NAME,
// p.PROJECT_ID
//}) as IEnumerable<DataRow>;
Przykłady w tym thread nie wydają się działać w tej sytuacji albo.
Chyba mógłbym po prostu uruchomić polecenie sql query w staroświecki sposób, ale czy linq nie powinien być szybszy?
widzę - tak to jest tylko ukrywanie InvalidCastException ? Jak mogę go wtedy wprowadzić do datatable? – JumpingJezza
@JumpingJezza: Tak; "as" ma być używane w przypadkach, gdy wiesz, że obiekt może nie być typem, którego się spodziewasz i nie jest "wyjątkowy". Słowo kluczowe 'as' ma wartość' null', jeśli rzutowanie jest niepoprawne i (w wyniku) może być używane tylko z typami odniesienia i 'Nullable'. Zobacz edytowaną właśnie publikację dla przykładowej metody rozszerzenia, która może przekształcić dowolny 'IEnumerable ' w 'DataTable'. –
Idealnie! Plus dowiedziałem się czegoś nowego o 'as' :) – JumpingJezza