联接表查询中的 Where 子句中的 Linq MAX



我的情况是,我的思想被封锁了,希望有人可以帮助我。

我有两张桌子。一个表包含订阅服务的客户和一个发票表。这些表不与数据库中的键链接,以便在删除客户时保留发票历史记录。这样,我必须查询客户表,通过另一个唯一的 contraint(数据库不知道(连接 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;

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

在这种情况下,他们没有任何发票记录的客户该怎么办。?

总结:我想查询最后一张知道的发票。如果此发票早于一年(上一年(或未发送发票,我想检索应发送新发票的客户列表。

我想你想要的是一个左外连接 - 这样你应该能够获得你需要的所有客户:

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;

最新更新