Linq to SQL to return 来自查询的多个计数未 returning 正确的结果
Linq to SQL to return multiple counts from query not returning correct results
我有一个 Linq to SQL 查询,我想 return 三个行数计数。一个用于不等于零的字段 (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();
然而它并没有return预期的结果。我意识到分组是错误的,但我不确定如何获得所需的结果。
例如,如果查询的第一部分(分组之前)return编辑了这两行...
---------------------------------
HaveCount | WantCount | SaleCount
---------------------------------
1 | 0 | 1
1 | 1 | 0
我现在的查询是 returning...(即只有一行)
1 | 0 | 1
但我希望它 return 从所有行计数...
2 | 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,如果您只想计算非零的数量,请使用第一个查询,否则,请使用第二个查询。
您不应该对计数中的列进行分组。如果我理解正确的话,你不想对任何东西进行分组,但 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();
我有一个 Linq to SQL 查询,我想 return 三个行数计数。一个用于不等于零的字段 (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();
然而它并没有return预期的结果。我意识到分组是错误的,但我不确定如何获得所需的结果。
例如,如果查询的第一部分(分组之前)return编辑了这两行...
---------------------------------
HaveCount | WantCount | SaleCount
---------------------------------
1 | 0 | 1
1 | 1 | 0
我现在的查询是 returning...(即只有一行)
1 | 0 | 1
但我希望它 return 从所有行计数...
2 | 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,如果您只想计算非零的数量,请使用第一个查询,否则,请使用第二个查询。
您不应该对计数中的列进行分组。如果我理解正确的话,你不想对任何东西进行分组,但 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();