如何使用“IN”在数据表上

发布于 2024-11-30 11:32:21 字数 196 浏览 1 评论 0原文

我在 MS SQL 中有此代码:

select * from table where column1 in (select column2 from table)

如何使用数据表翻译此代码?

类似于:table.select("column1 in column2")

I have this code in MS SQL:

select * from table where column1 in (select column2 from table)

How can I translate this using a DataTable?

Something along the lines of: table.select("column1 in column2")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不奢求什么 2024-12-07 11:32:21

你不能。
但你可以通过 linq + table.select 来完成:

table.Select(string.Format("CITY in '{0}'",string.Join("','",table.Rows.OfType<DataRow>().Select(r=>r["COUNTRY"].ToString()).Distinct())))

说明:
假设您有一个非常简单的表

ID CITY COUNTRY
1 美国纽约
2 俄罗斯莫斯科
3 美国洛杉矶
4 圣彼得堡 俄罗斯

  1. 使用 LINQ to Objects,我们从 Country 列中选择所有唯一值,并将值(通过 string.Join)连接到 IN 过滤器语句字符串。对于我们的示例,它将是 USA','Russia
  2. 通过字符串用引号包围 IN 过滤器语句。格式: 'USA','Russia'
  3. 在 dataTable.Select("CITY IN ('USA','Russia')" 中传递 IN 过滤器” )

仅供参考:

如果您需要对 DataTables\DataSets 执行非常酷的 SQL 查询,您可以使用 NQuery 它非常快并且符合标准。

you can't.
but you can do it via linq + table.select:

table.Select(string.Format("CITY in '{0}'",string.Join("','",table.Rows.OfType<DataRow>().Select(r=>r["COUNTRY"].ToString()).Distinct())))

EXPLANATION:
suppose you have a very simple table

ID CITY COUNTRY
1 NY USA
2 Moscow Russia
3 LA USA
4 St Peterburg Russia

  1. Using LINQ to Objects we select all unique values from Country column and concatenate values (via string.Join) to the IN filter statement string. For our example it will be USA','Russia
  2. surround IN filter statement with quotes via string.Format: 'USA','Russia'
  3. Pass IN filter in dataTable.Select("CITY IN ('USA','Russia')")

FYI:

If you need to execute really cool SQL queries against DataTables\DataSets you can use NQuery it is very fast and standards compliant.

几味少女 2024-12-07 11:32:21

假设这些表位于同一个 DataSet 中,您可以将 DataRelation 添加到 DataSet,然后使用 GetChildRows() 访问子行

var relation = new DataRelation("RelationName", 
    dataSet.Tables["Parent"].Columns["Column2"], 
    dataSet.Tables["Child"].Columns["Column1"]);

dataSet.Relations.Add(relation);

var childRows = from row in dataSet.Tables["Child"].Rows
                where row.GetParentRows("RelationName").Length > 0;

Assuming the tables are in the same DataSet, you can add a DataRelation to the DataSet and then access the child rows using GetChildRows()

var relation = new DataRelation("RelationName", 
    dataSet.Tables["Parent"].Columns["Column2"], 
    dataSet.Tables["Child"].Columns["Column1"]);

dataSet.Relations.Add(relation);

var childRows = from row in dataSet.Tables["Child"].Rows
                where row.GetParentRows("RelationName").Length > 0;
别靠近我心 2024-12-07 11:32:21

您可以使用以下 LINQ to DataSets 查询来获取与 SQL 中的查询相同的结果。

  var rows = from r1 in table.AsEnumerable()
             from r2 in table.AsEnumerable()
             where r1.Field<string>("Column1") == r2.Field<string>("Column2")
             select r1;

我从您的示例中假设这些列来自同一个表。如果没有,那么您只需按如下方式更改上面的表格即可。

  var rows = from r1 in table1.AsEnumerable()
             from r2 in table2.AsEnumerable()
             where r1.Field<string>("Column1") == r2.Field<string>("Column2")
             select r1;

这类似于

select * from table1 where column1 in (select column2 from table2)

You can use the following LINQ to DataSets query to get the same result as the query you have in SQL.

  var rows = from r1 in table.AsEnumerable()
             from r2 in table.AsEnumerable()
             where r1.Field<string>("Column1") == r2.Field<string>("Column2")
             select r1;

I assume from your example that the columns are coming from the same table. If not then you just need to change the table in the above as follows.

  var rows = from r1 in table1.AsEnumerable()
             from r2 in table2.AsEnumerable()
             where r1.Field<string>("Column1") == r2.Field<string>("Column2")
             select r1;

This is similar to

select * from table1 where column1 in (select column2 from table2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文