Linq MAX在Where子句中的Joined表查询

时间:2012-05-11 12:25:37

标签: linq

我处于一种情况,我的思想被封锁,希望有人可以帮助我。

我有两张桌子。一个表,其中包含一个子服务和一个发票表的客户。 如果客户被删除,这些表不会与数据库中的键相关联,以保留发票的历史记录。这样我就必须通过另一个唯一的约束(数据库不知道)查询加入invoiceheader表的customers表。此约束一起使用名称和地址。

发票每年发送一次。在发票标题表中,创建发票时存储日期。在几年内,constomers可以有多个发票。

我正在尝试创建一个linq查询,但我正在寻找一种我害怕解决方案的错误方法。

谁能指出正确的方法?

现在我有一个问题:

var temp = from c in context.customer
           from i in context.invoiceheader
           where c.name + c.address == i.name + i.address
           && i.invoicedate < DateTime.Now.Year
           select c;

通过此查询,我获得了去年收到发票且stil已订阅的所有客户。麻烦在于从未收到发票的新客户。

在这种情况下,如果客户没有任何发票记录,该怎么办?

summurized:我想查询最后知道的发票。如果此发票超过一年(上一年)或者没有在al发送发票,我想要检查应该发送新发票的客户列表。

1 个答案:

答案 0 :(得分:0)

我想您想要的是左外连接 - 这样您就可以获得所需的所有客户:

var customers = from c in context.customer
                join i in context.invoiceheader
                on c.Name + c.Address equals i.Name + i.Address
                into g
                from row in g.DefaultIfEmpty()
                where row == null ||row.invoicedate < DateTime.Now.Year
                select c;