2013-05-28 9 views
5

używam CSharp Linq aby utworzyć następujący raportużyciu LINQ z join używając dwóch gdzie w dwóch tabelach

Mam dwie tabele, jak poniżej

 

#Users 
nid  pid  name 
1  1  name1 
2  1  name2 

#Transactions 
nid  tid  location dcode 
1  T1  L1   D1 
2  T1  L2   D1 
2  T2  L1   D1 
2  T2  L3   D1 

Raport zawiera

 

    a) columns from users table where nid != pid 
    b) columns from transactions where tid == T2 and nid = results from a) 
    c) the combination can have only one top row in result 

nid  name  tid  Location 
2  name2  T2  L1 

the second record will not be present 
- 2  name2  T2  L3 

Próbowałem wykonać następujące czynności, korzystając z dołączenia

var report = (from u in users where u.nid != u.pid 
         join t in transactions 
         where t.tid == "T2" 
         on u.nid equals t.nid 
         select new 
         { 
         // the report columns 
         }).Distinct().ToList(); 

na drugi „gdzie” a błąd jest wyświetlany

dziękuję za wszelką pomoc

Odpowiedz

2

filtrowania Swap oraz łączących części zapytania i zmiana nazwy tid do t.tid lub innej klauzuli pożądane filtrowania (w przykładzie powstałej tabeli robi mają transakcje z tid == "T1", ale starają się odfiltrować z T2):

var report = (from u in users  
       join t in transactions 
       on u.nid equals t.tid  //<-- this line should precede 
       where t.tid == "T2"  //<-- this one 
       && u.nid != u.pid 
       select new 
       { 
        // the report columns 
       }).Distinct().ToList(); 

Dołącz części nie mogą być rozdzielone, więc nie można napisać where aż skończył join z klauzulą ​​on.

+0

Tak, błąd zniknął, oznaczę to jako odpowiedź po 8 minutach .. jeszcze raz dziękuję – arvind

Powiązane problemy