0

我处于一种我的思绪被阻塞的情况,希望有人能帮助我。

我有两张桌子。一张包含订阅服务客户的表格和一张发票表格。如果客户被删除,这些表没有与数据库中用于保存发票历史记录的键链接。这样,我必须通过另一个唯一约束(数据库不知道)查询加入 invoiceheader 表的客户表。此约束同时使用名称和地址。

发票每年发送一次。在发票标题表中,日期存储在发票创建时。在几年内,消费者可以拥有多张发票。

我正在尝试创建一个 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;

通过这个查询,我得到了所有去年收到发票并且仍然订阅的客户。问题在于从未收到发票的新客户。

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

总结:我想查询最后知道的发票。如果此发票超过一年(上一年)或根本没有发送发票,我想检索应发送新发票的客户列表。

4

1 回答 1

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;
于 2012-05-11T21:01:37.290 回答