LINQ объединить с критериями фильтра - PullRequest
2 голосов
/ 20 января 2010

Как что-то подобное делается в linq? У него есть критерии фильтра для JOIN.

Это взято из этого вопроса: Критерии фильтра SQL в критериях соединения или более эффективное предложение

select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales  on salesman.salesmanid =sales.salesmanid 
              and sales.salesdate < salesman.promotiondate
group by salesman.salesmanid

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 января 2010

Вы не можете join ни на чем другом, кроме equals, но это, вероятно, не то, что вы хотите здесь в любом случае.Я бы сказал, что SQL-запрос написан неловко и что сравнение дат должно быть в предложении WHERE, но я полагаю, что это субъективно.В любом случае, это только способ сделать это в Linq:

var results =
    from sm in salesman
    join s in sales on sm.salesmanid equals s.salesmanid
    where s.salesdate < sm.promotiondate
    group s by s.salesmanid into g
    select new { salesmanid = g.Key, maxsales = g.Max(s => s.quantity) };

Примечание - исправлена ​​опечатка на групповой строке

0 голосов
/ 20 января 2010

Предполагая, что у вас есть свойства навигации между вашими таблицами, вы можете оставить соединение со структурой сущностей.

var results = from s in salesmen
              group s by s.salesmanid
              select new
              {
                  s.salesmanid,
                  maxsales = s.sales
                      .where(x => s.salesdate < x.promotiondate)
                      .max(x => x.quantity)
              };
...