То, что вы пытаетесь, не является действительным LINQ-To-SQL. Это распространенное недоразумение. В LINQ-To-SQL вы просто отображаете некоторые таблицы на сущности, а затем во время выполнения ваш запрос LINQ переводится средой SQL и возвращается как предварительно определенные строго типизированные объекты сущностей. (Я использую «сущность» в качестве описательного термина; ничего общего с Entity Framework.) LINQ-To-SQL - это то, что вы делаете вместо ADO.NET.
То, что вы делаете, это разновидность LINQ-to-object, часто называемая LINQ-To-Dataset, которую я часто использую. Метод расширения .AsEnumerable()
возвращает DataRows объекта DataTable в объекте IEnumerable<DataRow>
, что очень удобно. Однако с LINQ-To-DataTable вы либо (A) не будете иметь строго типизированные объекты, либо (B) вы берете на себя ответственность за размещение ваших данных в строго типизированных объектах самостоятельно . После того, как вы использовали ADO.NET , как и всегда, LINQ-to-DataTable - отличный способ получить ваши данные из ADO.NET DataTables и в что-то иначе , что бы ни потребляли данные.
Ваш запрос LINQ, приведенный выше, возьмет ваш DataTable, который уже работал с БД, и вернет IEnumerable<DataRow>
, что отлично. Есть:
После вашего заявления LINQ выполните:
For Each DataRow in query
//Do your stuff
Next
Если вам действительно нужен объект DataTable, в частности, на этом этапе, проверьте это . Но вам действительно нужен DataTable?
И я должен предложить действительно замечательную книгу о LINQ. LINQ пород . В мире .NET, в котором, кажется, есть слишком много того, чему мы должны научиться, LINQ стоит потратить время, чтобы по-настоящему понять. Получить: LINQ в действии .