Zapytanie w LINQ odnośnie DataTable

0

Witam.
Mam pewien problem. Posiadam 2 bliźniacze tabelki typu datatable o tych samych kolumnach. Moim zadaniem jest pobranie rekordów które znajdują się tylko w 1 tabeli a nie ma ich w 2 tabeli. Problem częściowo rozwiązałem niestety potrafię pobrać i porównać ze sobą tylko jedną kolumnę z tych dwóch tabel. Czy wie ktoś jak dołączyć do tego zapytania operator logiczny & tak aby można było porównać jeszcze jedną kolumnę np. kolumny o nazwie "id" oraz "od_kiedy"? Tak jak zrobiłem to z kolumnami nazwa? Oto listing:

var rows = from t1 in miejscaFromRozklady.AsEnumerable()
                       join t2 in miejscaFromRozkladyZewnetrzne.AsEnumerable()
                       on t1.Field<string>("nazwa") equals t2.Field<string>("nazwa") into tg 
                       from tcheck in tg.DefaultIfEmpty() 
                       where tcheck == null
                       select t1;
            

foreach (DataRow p in rows)
{
         Console.WriteLine(p.Field<string>("id") + "    " + p.Field<string>("nazwa") + "     " + 
         p.Field<DateTime>("od_kiedy"));
} 

Zadanie wydaje się być już ukończone a nie mogę zrozumieć jak dodawać do LINQ operatory logiczne. Pozdrawiam Tomek.

1

Nie jestem pewien czy o to chodziło :P


var rows = from t1 in miejscaFromRozklady.AsEnumerable()
                       join t2 in miejscaFromRozkladyZewnetrzne.AsEnumerable()
                       on t1.Field<string>("nazwa") equals t2.Field<string>("nazwa") 
                       where
                       (t1.Field<int>("Id") == t2.Field<int>("Id") &&
                        t1.Field<DateTime>("Od_Kiedy") == t2.Field<DateTime>("Od_Kiedy"))
                       select t1;
0

Pisane z palca:

var rows = from t1 in miejscaFromRozklady.AsEnumerable()
                    join t2 in miejscaFromRozkladyZewnetrzne.AsEnumerable()
                    on new { t1.Field<string>("nazwa"), t1.Field<DateTime>("od_kiedy"), t1.Field<int>("id") } equals 
                    new { t2.Field<string>("nazwa"), t2.Field<DateTime>("od_kiedy"), t2.Field<int>("id") } 
                    select t1;

Lub:

var rows = miejscaFromRozklady.Join(miejscaFromRozkladyZewnetrzne,
               t1 =>
               new {t1.Field<string>("nazwa"), t1.Field<DateTime>("od_kiedy"), t1.Field<int>("id")},
               t2 =>
               new {t2.Field<string>("nazwa"), t2.Field<DateTime>("od_kiedy"), t2.Field<int>("id")});

Pisałem to na czuja więc nie wiem czy zadziała to w ogóle. Wywaliłem tcheck bo wygląda jak by w ogóle nic nie wnosiło do całości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1