使用LINQ从嵌套SQL查询中获取结果

时间:2010-05-21 13:50:00

标签: c# sql linq-to-sql dataset linq-to-dataset

这是我在Linq的第一个问题和第一天,让我有点难以理解。 我想从数据库中获取一些记录

即。

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

我已经拍了两张DataTable。即tblDepartment,tblMap

现在我想获取此结果,并希望将其存储在第三个DataTable中。

我该怎么办呢。

在google搜索之后,我已经能够构建这个查询了。

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

请为我提供一些主要针对LinqDataTables学习DataSets的链接。

修改

我有一个非常相似的例子 here ,但我仍然无法理解它是如何工作的。 请把一些火炬放在上面。

我想这样做是因为我已经从数据库中获取数据,并且当我已有数据时不想再次发送请求。但我想根据条件过滤这些数据。

1 个答案:

答案 0 :(得分:2)

您尝试的不是实际的LINQ-To-SQL。这是一种常见的误解。在LINQ-To-SQL中,您可以通过简单的方式将一些表映射到实体,然后在运行时,您的LINQ查询由框架由SQL转换,并作为预定义的强类型实体对象返回。 (我使用“entity”作为描述性术语;与Entity Framework无关。)LINQ-To-SQL是你做而不是 ADO.NET的东西。

你正在做的是LINQ-to-object的味道,通常被称为“LINQ-To-Dataset”,我经常使用它。扩展方法.AsEnumerable()IEnumerable<DataRow>对象中返回DataTable的DataRows,非常方便。但是,对于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对象,那么check this out。但你真的需要一个DataTable吗?

我必须推荐一本关于LINQ的精彩书。 LINQ rock 。在一个似乎有太多我们需要学习的.NET世界中,LINQ值得花时间去真正理解。获取:LINQ In Action