我有一个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;
对此有何想法?
答案 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