我在 MS SQL 中有这段代码:
select * from table where column1 in (select column2 from table)
如何使用 DataTable 进行翻译?
类似于以下内容:table.select("column1 in column2")
我在 MS SQL 中有这段代码:
select * from table where column1 in (select column2 from table)
如何使用 DataTable 进行翻译?
类似于以下内容:table.select("column1 in column2")
你不能。但你可以通过 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 圣彼得堡俄罗斯
供参考:
如果您需要对 DataTables\DataSets 执行非常酷的 SQL 查询,您可以使用NQuery,它非常快速且符合标准。
假设表在同一个数据集中,您可以向数据集中添加一个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;
您可以使用以下 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)