Использование LINQ для извлечения результатов из вложенных SQL-запросов - PullRequest
1 голос
/ 21 мая 2010

Это мой первый вопрос и первый день в Линке, так что мне было трудно понять. Я хочу получить некоторые записи из базы данных

т.е.

select * from tblDepartment 
where department_id in 
(
   select department_id from tblMap 
   where Guest_Id = @GuestId
)

Я взял две таблицы данных. то есть tblDepartment, tblMap

Теперь я хочу получить этот результат и сохранить его в третьем DataTable.

Как я могу это сделать.

Мне удалось построить этот запрос до сих пор после поиска в Google.

var query = from myrow in _dtDepartment.AsEnumerable()
            where myrow.Field<int>("Department_Id") == _departmentId
            select myrow;

Пожалуйста, дайте мне ссылку для обучения Linq в основном для DataTables и DataSets.

EDIT:

У меня есть очень похожий пример здесь но я все еще не могу понять, как он работает Пожалуйста, подожгите его.

Я хочу сделать это, потому что я уже извлекаю данные из базы данных и не хочу отправлять запрос снова, когда у меня уже есть данные. Но я хочу отфильтровать эти данные по условиям.

1 Ответ

2 голосов
/ 21 мая 2010

То, что вы пытаетесь, не является действительным 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 в действии .

...