1

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

IE

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

我拿了两个数据表。即tblDepartment,tblMap

现在我想获取这个结果并将其存储在第三个 DataTable 中。

我怎样才能做到这一点。

在谷歌搜索之后,我一直能够构建这个查询。

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

请为我提供一些学习链接,Linq主要用于DataTablesDataSets

编辑:

我在这里有一个非常相似的例子,但我仍然无法理解它是如何工作的。请在上面放一些手电筒。

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

4

1 回答 1

2

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

您正在做的是一种 LINQ-to-object,通常称为“LINQ-To-Dataset”,我经常使用它。扩展方法.AsEnumerable()在对象中返回一个DataTable的DataRows,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 在行动

于 2010-05-21T14:03:34.867 回答