Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using linq with join using two where on two tables

Tags:

c#

linq

I am using Csharp Linq to create the following report

I have two tables as below


#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

The report contains


    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

I have tried the following, using join

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();

on the second 'where' a Error is displayed

thank you for any assistance

like image 473
arvind Avatar asked Nov 03 '22 21:11

arvind


1 Answers

Swap filtering and joining parts of your query and rename tid into t.tid or other desired filtering clause (in your example resulting table does have transactions with tid == "T1", but you try to filter with 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();

Join parts can't be separated, so you can't write where until you finished join with on clause.

like image 71
Ilya Ivanov Avatar answered Nov 15 '22 05:11

Ilya Ivanov