J'ai deux DataTables t1
et t2
. J'essaie d'effectuer une jointure LINQ gauche, multiple equijoin, pour obtenir les DataRows dans t1
qui ne sont pas dans t2
.ayant des problèmes avec jointure à gauche LINQ
Dans SQL, ce que je suis en train d'accomplir est:
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
Jusqu'à présent, je donne les résultats suivants:
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;
}
Ce échoue sur la ligne j_a = join_row["a"]
avec ce message: Column 'a' does not belong to table.
Je pensais que la ligne into leftJoinT1withoutT2
était censée mettre les résultats de la jointure dans un var avec la colonne stru cture de la table t1
, à partir de laquelle les entrées non correspondantes seraient supprimées en utilisant where t2_row["a"] == null
. N'est-ce pas ce qui se passe ici? Je suis un peu confus.
Votre requête ne compile pas – horgh
@KonstantinVasilcov, oui, la ligne 'where t2_row [" a "] == null'. désolé, j'avais commenté cette ligne tout en essayant de déboguer cela. Je ne sais pas pourquoi il ne compile pas, t2_row' ne devrait-il pas être visible à ce niveau de la requête? – sigil