2012-05-11 39 views
0

我处于一种情况,我的思想被阻止,希望有人能帮助我。Linq MAX在Where子句中加入表查询

我有两个表。一张带有提供服务和一张发票表的客户的表格。 这些表格未与数据库中的键链接,以便在客户被删除时保留发票的历史记录。这样我必须通过另一个独特的约束(数据库不知道)来查询加入invoiceheader表的customers表。这个约束是一起使用名字和地址。

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

我想创建一个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:我想查询最新的发票。如果此发票年龄超过一年(前一年)或没有发票发送给我,我想检索一份客户名单,应该发送新的发票。

+0

是您的查询返回的东西吗?如果您在i.name或i.address中没有任何价值,您遇到了麻烦?如果是的话,你想在这种情况下得到什么? – Habib

+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;