这是我在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;
请为我提供一些主要针对Linq
和DataTables
学习DataSets
的链接。
修改
我有一个非常相似的例子 here ,但我仍然无法理解它是如何工作的。 请把一些火炬放在上面。
我想这样做是因为我已经从数据库中获取数据,并且当我已有数据时不想再次发送请求。但我想根据条件过滤这些数据。
答案 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。