2

我在 MS SQL 中有这段代码:

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

如何使用 DataTable 进行翻译?

类似于以下内容:table.select("column1 in column2")

4

3 回答 3

2

你不能。但你可以通过 linq + table.select 来做到这一点:

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

解释:假设你有一个非常简单的表

ID 城市 国家
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,它非常快速且符合标准。

于 2011-08-20T16:16:01.113 回答
1

假设表在同一个数据集中,您可以向数据集中添加一个DataRelation,然后使用 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;
于 2011-08-20T16:21:15.460 回答
1

您可以使用以下 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)
于 2011-08-20T16:29:59.060 回答