LINQ内连接条件

时间:2013-11-18 07:22:23

标签: c# .net linq-to-sql

假设我有以下表格:

**Members**
Code  Name
001   Sue
002   Peter
003   John

**Sales Info**
MemCode   Date        Type (A/B)  Values
001       17/12/2013  A           100
001       17/11/2013  B           100
002       16/12/2013  A           100

我想拥有以下结果表

**Member Sales in 2013**
MemCode  Jan(A) Jan(B) Feb(A) ... Nov(B) Dec(A) Dec(B)
001       0      0      0          100    100    0
002       0      0      0          0      100    0

我首先尝试使用查询确定一些数据(11月(A)和11月(B)),

var query = from tb in Members
            join tb2 in SalesInfo on tb.MemCode equals tb2.MemCode
            join tb3 in SalesInfo on tb.MemCode equals tb3.MemCode
            where tb2.Type.Equals("A") &&
                  tb2.Date.Month.Equals(11)
                  tb3.Type.Equals("B") &&
                  tb3.Date.Month.Equals(11)
            Select ...

然而,它没有返回数据,因为11月没有找到A记录,因此整行被过滤。有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

问题是你要求(Type == A&& Type == B),这是不可能的。您可以先选择A,然后在子查询中获取相同日期的B值。

答案 1 :(得分:1)

确实,如果你想要类型A和类型B,你应该选择类型== A OR类型== B.没有行会满足这两个条件:)

这样的事情更简单,可能更有效

var query = from tb in Members
            join tb2 in SalesInfo on tb.MemCode equals tb2.MemCode
            where (tb2.Type.Equals("A") ||
                   tb2.Type.Equals("B")) &&
                   tb2.Date.Month.Equals(11)
            Select ...