Zapytanie w LINQ odnośnie DataTable

Zapytanie w LINQ odnośnie DataTable
D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
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:

Kopiuj
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.

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
1

Nie jestem pewien czy o to chodziło :P

Kopiuj

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;
DibbyDum
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Kraków
0

Pisane z palca:

Kopiuj
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:

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.