我有一个Linq to SQL查询,我想返回三行数。一个用于哪个字段不等于零(HaveCount),另一个用于另一个字段,当它不等于零(WantCount)时,另一个用于另一个字段,当它不等于零时(SaleCount)。
这是我的查询...
var counts = (from a in dc.tblMemberIssues
join b in dc.vwMembers on a.MemberID equals b.MemberID
where a.IssueID == issueID
group a by new { a.HaveCount, a.WantCount, a.SaleCount } into d
select new
{
HaveCount = d.Count(e => e.HaveCount != 0),
WantCount = d.Count(e => e.WantCount != 0),
SaleCount = d.Count(e => e.SaleCount != 0)
}).First();
然而,它不会返回预期的结果。我意识到分组是错误的,但我不确定如何获得理想的结果。
例如,如果查询的第一部分(在分组之前)返回这两行......
---------------------------------
HaveCount | WantCount | SaleCount
---------------------------------
1 | 0 | 1
1 | 1 | 0
我的查询现在正在返回...(即只有一行)
1 | 0 | 1
但我希望它能从所有行返回计数......
2 | 1 | 1
我需要对查询做些什么才能让它以我需要的方式工作?
NB。尝试仅使用一个数据库查询来执行此操作。
答案 0 :(得分:3)
您不应该对计数中的列进行分组。如果我理解正确你不想对任何事情进行分组,但Linq不允许这样做,所以把true
作为分组。 (或任何其他常数)
将您的查询更改为:
var counts = (from a in dc.tblMemberIssues
join b in dc.vwMembers on a.MemberID equals b.MemberID
where a.IssueID == issueID
group a by true into d
select new
{
HaveCount = d.Count(e => e.HaveCount != 0),
WantCount = d.Count(e => e.WantCount != 0),
SaleCount = d.Count(e => e.SaleCount != 0)
}).First();
答案 1 :(得分:1)
您似乎需要将counts
保存到列表中,然后计算每种类型的计数,如下所示:
var counts = (from a in dc.tblMemberIssues
join b in dc.vwMembers on a.MemberID equals b.MemberID
where a.IssueID == issueID).ToList();
var results = new
{
HaveCount = counts.Count(e => e.HaveCount != 0),
WantCount = counts.Count(e => e.WantCount != 0),
SaleCount = counts.Count(e => e.SaleCount != 0)
};
你也可能想要总和:
var results = new
{
HaveCount = counts.Sum(e => e.HaveCount),
WantCount = counts.Sum(e => e.WantCount),
SaleCount = counts.Sum(e => e.SaleCount)
};
如果您只想计算非零的数量,即使某些初始计数可能大于1,请使用第一个查询,否则,请使用第二个查询。