我正在使用Csharp Linq创建以下报告
我有两张桌子如下
#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
该报告包含
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
我尝试了以下,使用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();
Run Code Online (Sandbox Code Playgroud)
在第二个'where'显示错误
谢谢你的帮助
交换查询的过滤和连接部分,并重命名tid为t.tid或其他所需的过滤子句(在您的示例结果表中确实有 的事务tid == "T1",但您尝试使用 进行过滤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();
Run Code Online (Sandbox Code Playgroud)
where连接部分无法分开,因此在完成joinwith子句之前不能编写on。