我有這樣的代碼在MS SQL:如何使用 'IN' 上一個DataTable
select * from table where column1 in (select column2 from table)
怎麼可以這樣使用一個DataTable我翻譯?
線沿線的東西:table.select("column1 in column2")
我有這樣的代碼在MS SQL:如何使用 'IN' 上一個DataTable
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 LA USA
4 St Peterburg俄羅斯
FYI:
如果需要對數據表\數據集執行很酷的SQL查詢,你可以用它NQuery是非常快速和符合標準。
假設表是在相同的數據集,可以將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;
你用過兩張桌子嗎?我正在處理的表同時具有column1和column2。另外,我只使用了一個DataTable。從未使用數據集。 –
現在的問題是:如何使用同一張表 –
您可以使用下面的LINQ到數據集查詢來獲取子行與您在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)
我使用了同一張表:)我不知道這是如何工作的......你能解釋更多你的第一個代碼嗎? –
@傑拉德,那麼第一個例子應該爲你做的伎倆。我只是認爲安全地顯示兩個選項。 –
@Chris我認爲你應該使用連接而不是IN。 –
能否請您解釋一下這是如何工作? –
所以這就是......簡單地說,這將不同的值連接在「國家」列中,並且由此生成的字符串將由Select()使用,對吧?但如果桌子有大約100行,這不會浪費時間嗎? –
在我的例子中只有一個循環(Rows.Select),其他的例子使用多個循環。對於100行,它會很快。對於非常大的表格,我會推薦你使用NQuery。 –