2015-08-12 3 views
1

У меня есть таблица db, которая имеет данные, как показано ниже.LINQ - Группировка с наличием?

Name Tool Security QUANTITY PRICE 
    ABC  ML  XXX  100   50  
    ABC  DB  XXX -50   50  
    XYZ  CS  YYY  30   30 

Мое требование состоит в том, чтобы сгруппировать имя и безопасность и выбрать только ту запись, которая имеет как отрицательное, так и положительное количество. В T-SQL это мой запрос, который отлично подходит. Нужна аналогичная в LINQ. Например, в приведенном выше примере будут показаны обе строки для ABC & XXX.

select t1.* from MyTable as t1 
inner join 
(
    select Name,Security from MyTable 
    group by Name, Security 
    HAVING min(Quantity)<0 and max(Quantity)>0 
) as t2 on t1.Name=t2.Name and t1.Security =t2.Security 

Это мой внутренний запрос, но он не работает.

var Positions = from r in lstpositions 
            group r by new { r.Name, r.Security} into grp 
            where grp.Min(x => x.Quantity<0) && grp.Max(x => x.Quantity >0) 
            select grp; 

Любые мысли об этом?

ответ

0

Причина, по которой ваш запрос не работает, заключается в том, что вы принимаете мин результата сравнения.

Однако я думаю, что вы хотите any() не мин и макс

where grp.Any(x => x.Quantity<0) && grp.Any(x => x.Quantity >0) 

Это будет проверять любое значение ниже 0 и любое значение выше 0. Это будет короткое замыкание, так что не имеет траверс весь список, который должен сделайте это быстрее.

+0

Спасибо так много. Я не понял, что должен попробовать. – DJay

0

Или это

where grp.Min(x => x.Quantity) < 0 && grp.Max(x => x.Quantity) > 0 
Смежные вопросы