【发布时间】:2018-07-25 22:06:31
【问题描述】:
我正在尝试创建一个 linq 查询。
我的 SQL 查询如下:
select
count(*) as Customers,
sum(IsActive) ActiveCustomers,
Sum(DiscountAmount) DiscountAmount
from (
select
Customer.Oid,
Max(Case when DocumentHeader.DocumentNumber>0 then 1 else 0 end) IsActive,
Sum(DocumentHeader.PointsDiscountAmount) DiscountAmount
from
Customer left join
DocumentHeader on customer.Oid=DocumentHeader.Customer and DocumentHeader.FinalizedDate>='20160101' and DocumentHeader.FinalizedDate<='20180131'
where isnull(customer.CardID, '')>''
group by Customer.Oid
) xxx
直到现在我已经尝试过了,但它没有给我写响应
var result = from customers in Customers
where !string.IsNullOrEmpty(customers.CardID)
join documentHeaders in DocumentHeaders on customers.Oid equals documentHeaders.Customer.Oid
where documentHeaders.FinalizedDate>=apo
&& documentHeaders.FinalizedDate<=eos
select new
{
Oid = customers.Oid,
documentHeaders.DocumentNumber,
PromotionValue = documentHeaders.DocumentType.ValueFactor
};
return result.GroupBy(g=> new {g.Oid}).Select(s => new { groupid=1, Oid= s.Key.Oid, MaxDoc = s.Max(a => a.DocumentNumber)>0?1:0, PromotionValue = s.Max(a => a.PromotionValue) });
谢谢
【问题讨论】:
-
对不起,但是...
where isnull(customer.CardID, '')>''和where customer.CardID>''不是返回相同的集合吗?我的意思是null永远不可能是>'',对吧?此外,您如何期望Max(在 C# 中)返回与sum(在 SQL 中)相同的内容?最后,MaxDoc = s.Max(a => a.DocumentNumber)>0?1:0括号与您似乎想要的不匹配(MaxDoc = s.Max(a => a.DocumentNumber>0?1:0)也许?) -
我不确定sqlserver的每个数据库是的
-
我试图获取一些数据以将它们汇总到我的报告中
-
是的,我评论的第一部分只是指出您的查询可能过于复杂
-
如果你删除这部分,剩下的不是很简单,我想要客户的数量,活跃的客户和来自积分系统的折扣总和