【问题标题】:LINQ to loop and get the results for the same recordsLINQ 循环并获取相同记录的结果
【发布时间】:2015-12-08 17:19:51
【问题描述】:

假设我有两个结构几乎相同的表

表格来源

ID         bigint
Username   nvarchar
Password   nvarchar
Name       nvarchar

TableTo

ID         bigint
Username   nvarchar
Password   nvarchar

现在我想生成插入到 SQL 查询(使用参数),但仅适用于两个表中相同的字段。 (id、用户名、密码)

我想过将这两个表结构查询读入 dataTable,然后使用 LINQ 循环以获取机器人表中相同的字段数组?

Dim dtFrom as new datatable
dim dtTo as NEW dataTable

dtTo = _LoadAvaliableToFields()
dtFrom = _loadAvailableFromFields()

那个 LINQ 会怎么样?

之后,我需要使用参数将插入查询添加到数据库。有没有更简单的方法来做到这一点?

【问题讨论】:

  • 我建议如何先编写正确的 SQL 语句,然后再考虑使用 LINQ。 LINQ 不是 SQL 的替代品。事实上,如果您使用像tableinsert 这样的词,这非常非常强烈地表明您应该编写SQL 语句,而不是使用LINQ 查询来处理实体。顺便说一句,由于 LINQ 是一种查询语言,它没有修改功能。正是 ORM 提供了这个
  • 感谢您的回答。这个例子是我在这个论坛上写的。我有大约 255 个表需要在我的程序中解决这个问题。
  • 您需要的基础是Intersect 查询(使用字段名称):查找两个序列共有的元素。

标签: sql-server vb.net linq


【解决方案1】:

使用查询语法,“选择”查询与 SQL 查询非常相似:

Dim query = 
    From idFrom In TableFrom _
    Join idTo In TableTo _
    On     New With {Key .ID = idFrom.ID, Key .U = idFrom.Username, Key .P = idFrom.Password} _
    Equals New With {Key .ID = idTo.ID,   Key .U = idTo.Username,   Key .P = idTo.Password} _
    Select idFrom

要执行插入,您需要将对象添加到上下文中的适当集合中,然后调用SaveChanges

我会注意到直接 SQL 查询会更有效:

INSERT INTO {destination}
SELECT f.ID,f.Username,f.Password
FROM TableFrom f
INNER JOIN TableTo t 
ON f.ID = t.ID AND f.Username = t.Username AND f.Password = t.Password

【讨论】:

  • 先生,这里的主要问题是。如何获取包含两个表的字段的结果。我不能手动编写那些字段。我需要一个脚本来生成相同的字段
  • 好的,我误解了你的问题。我不会使用 Linq。 Linq 是强类型的,而您需要动态选择列。我会使用 DataTable 动态选择公共字段,然后动态构建 INSERT 命令。
猜你喜欢
  • 2014-06-20
  • 2019-11-16
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2020-08-15
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多