我有兩個數據表t1
和t2
。我試圖執行一個LINQ左連接,多個equijoin,以獲得不在t2
中的t1
中的DataRows。遇到左連接問題LINQ
在SQL中,我想要做到的是:
select t1.*
from t1
left join t2
on t1.a=t2.a and
t1.b=t2.b and
t1.c=t2.c
where
t2.a is null
到目前爲止,我有以下幾點:
public DataTable t1_without_t2(DataTable t1, DataTable t2)
{
var query = from t1_row in t1.AsEnumerable()
join t2_row in t2.AsEnumerable()
on
new { t_a = t1_row["a"], t_b = t1_row["b"], t_c = t1_row["c"]}
equals
new { t_a = t2_row["a"], t_b = t2_row["b"], t_c = t2_row["c"]}
into leftJoinT1withoutT2
from join_row in leftJoinT1withoutT2.DefaultIfEmpty()
where t2_row["a"] == null
select new
{
j_a = join_row["a"],
j_b = join_row["b"],
j_c = join_row["c"],
};
DataTable dt = t1.Clone();
foreach (var result in query)
{
dt.LoadDataRow(
new object[]
{
result.j_a,
result.j_b,
result.j_c
},
false);
}
return dt;
}
這未能與此消息系j_a = join_row["a"]
: Column 'a' does not belong to table.
我認爲into leftJoinT1withoutT2
行應該把連接的結果放入一個var與列stru表t1
,從中可以使用where t2_row["a"] == null
從中刪除不匹配的條目。這不是這裏發生的事情嗎?我有點困惑。
您的查詢無法編譯 – horgh
@KonstantinVasilcov,是的,'where t2_row [「a」] == null'行。對不起,我已經在嘗試調試時發表了評論。我不知道它爲什麼不編譯,不應該在查詢的這個級別顯示「t2_row」? – sigil