Reputation: 1493
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
Upvotes: 5
Views: 134
Reputation: 23626
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.
Upvotes: 2