LINQ - Group With with?

时间:2015-08-12 17:29:10

标签: c# linq

我有一个db表,其中包含如下数据。

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;

对此有何想法?

2 个答案:

答案 0 :(得分:0)

您的查询不起作用的原因是您获取比较结果的最小值。

但我认为你希望any()不是最小和最大

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

这将检查低于0的任何值和高于0的任何值。它将短路,因此它不会遍历整个列表,这应该使它更快。

答案 1 :(得分:0)

或者这个

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