2012-05-11 2 views
0

Я в ситуации, когда мой разум заблокирован, надеюсь, кто-то может мне помочь.Linq MAX in Where clause in Entry table query

У меня есть две таблицы. Одна таблица с клиентами службы подписки и одна таблица счетов. эти таблицы не связаны с ключами в базе данных для хранения истории счетов-фактур, если клиенты удалены. Таким образом, я должен запросить таблицу клиентов, соединяющую таблицу счета-фактуры другим уникальным признаком (не знать в базе данных). Это ограничение использует имя и адрес вместе.

Счет-фактура отправляется один раз в год. В таблице заголовка счета-фактуры дата сохраняется при создании счета-фактуры. Через несколько лет у составителей может быть несколько счетов-фактур.

Я пытаюсь создать запрос 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; 

С помощью этого запроса я получаю все клиенты, которые имеют получать счета в прошлом году и стил подписались. Проблема связана с новыми клиентами, которые никогда не получали счет-фактуру.

Что делать клиентам, если в этом случае у них нет счетов-фактур.?

summurized: Я хочу запросить последний счет-фактуру. Если этот счет-фактура старше года (предыдущий год) или нет счета-фактуры отправляется по почте, я хочу вернуть список клиентов, вам должен быть отправлен новый счет-фактура.

+0

это ваш запрос возвращается что-то? и у вас возникают проблемы, когда у вас нет какой-либо ценности в i.name или i.address? и если да, то чего вы хотите получить в этом случае? – Habib

+0

запрос работает хорошо для существующих клиентов, где счет отправлен в прошлом. кроме новых клиентов, не удаляются. Поэтому, если для конкретного клиента нет счета-фактуры (invoice = null) –

ответ

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;