C# LINQ查询中单个表上的多个计数
我在LINQ查询中对单个表进行多次计数时遇到问题。我正在使用NHibernate、LINQ到NHibernate和C 查询是一个填充的列表。我有一个表,它有一个名为FullRef的布尔值。我想做一个LINQ查询,给出每个TrackId上FullRef=false和FullRef=true的发生次数。TrackId每次获得一个曲目时都会获得一个新行。Source==“UserRef” 在下面的查询中,我得到了FullRef=true的正确数字计数(来自FullRefTrueCount),但它在fullreffalsecont上给出了一个未知的错误数字C# LINQ查询中单个表上的多个计数,c#,sql,linq,nhibernate,C#,Sql,Linq,Nhibernate,我在LINQ查询中对单个表进行多次计数时遇到问题。我正在使用NHibernate、LINQ到NHibernate和C 查询是一个填充的列表。我有一个表,它有一个名为FullRef的布尔值。我想做一个LINQ查询,给出每个TrackId上FullRef=false和FullRef=true的发生次数。TrackId每次获得一个曲目时都会获得一个新行。Source==“UserRef” 在下面的查询中,我得到了FullRef=true的正确数字计数(来自FullRefTrueCount),但它在fu
var query2 = from track in query
where track.Source == "UserRef"
group track by new { TrackId = track.TrackId, FullRef = track.FullRef } into d
select new FullReferrer
{
Customer = d.Key.TrackId,
FullRefFalseCount = d.Where(x => x.FullRef == false).Count(),
FullRefTrueCount = d.Where(x => x.FullRef == true).Count()
};
我还试图修改它,使其在GROUPBY中不包含FullRef。这是通过如下方式删除服务器上的FullRef=track.FullRef完成的
var query2 = from track in query
where track.Source == "UserRef"
group track by new { TrackId = track.TrackId } into d
select new FullReferrer
{
Customer = d.Key.TrackId,
FullRefFalseCount = d.Where(x => x.FullRef == false).Count(),
FullRefTrueCount = d.Where(x => x.FullRef == true).Count()
};
现在它给出了TrackId的总数,忽略了我的.Where(x=>x.FullRef==true/false)语句
有人知道怎么修吗?
我想问题出在“组员”身上。我能不能避免分组?
我可能需要加入吗?尝试计数(条件)
尝试计数(条件)
试试这个
试试这个。这将从数据表中获取预期数据
string source = "UserRef";
var result = from row in dt.AsEnumerable()
where row["source"].Equals(source)
group row by row["TrackId"]
into g
select new
{
TrackId = g.Key,
FullRefTrueCount = ((from track in g where track["FullRef"].Equals("true") select track).Count()),
FullRefFalseCount = ((from track in g where track["FullRef"].Equals("false") select track).Count())
};
试试这个。这将从数据表中获取预期数据
string source = "UserRef";
var result = from row in dt.AsEnumerable()
where row["source"].Equals(source)
group row by row["TrackId"]
into g
select new
{
TrackId = g.Key,
FullRefTrueCount = ((from track in g where track["FullRef"].Equals("true") select track).Count()),
FullRefFalseCount = ((from track in g where track["FullRef"].Equals("false") select track).Count())
};
对于NHibernate,我不知道,但是使用Linq和实体框架应该可以得到您想要的:
var query2 = (
from track in someDbSet
select new FullReferrer
{
Customer = track.trackId
, FullRefFalseCount = (from fullRefFalse in someDbSet.tracks
where fullRefFalse.IsSale == false
&& fullRefFalse.trackId == track.trackId
select fullRefFalse).Count()
, FullRefTrueCount = (from fullRefTrue in someDbSet.tracks
where fullRefTrue.IsSale == true
&& fullRefTrue.trackId == track.trackId
select fullRefTrue).Count()
}
).Distinct();
对于NHibernate,我不知道,但是使用Linq和实体框架应该可以得到您想要的:
var query2 = (
from track in someDbSet
select new FullReferrer
{
Customer = track.trackId
, FullRefFalseCount = (from fullRefFalse in someDbSet.tracks
where fullRefFalse.IsSale == false
&& fullRefFalse.trackId == track.trackId
select fullRefFalse).Count()
, FullRefTrueCount = (from fullRefTrue in someDbSet.tracks
where fullRefTrue.IsSale == true
&& fullRefTrue.trackId == track.trackId
select fullRefTrue).Count()
}
).Distinct();
对于其他有类似问题的人,我通过将其设为“.AsEnumerable()”来解决
var query2=from track in query.AsEnumerable()/!x、 FullRef),
FullRefTrueCount=d.Count(x=>!x.FullRef)
};
对于其他有类似问题的人,我通过将其设为“.AsEnumerable()”来解决
var query2=from track in query.AsEnumerable()/!x、 FullRef),
FullRefTrueCount=d.Count(x=>!x.FullRef)
};
很抱歉,这对我不起作用。然后,查询没有给出任何结果(“枚举产生了任何结果”),很抱歉,这对我不起作用。然后查询根本不给出任何结果(“枚举产生了任何结果”),这就产生了完全相同的问题不幸的是,这就产生了完全相同的问题不幸的是,这也不起作用。假设您是指.Count()而不是.Count。这也不起作用。假设您的意思是.Count()而不是.Count。此转换为单个sql查询吗?此转换为单个sql查询吗?
var query2 = from track in query.AsEnumerable() // <--- the solution
where track.Source == "UserRef"
group track by new { TrackId = track.TrackId } into d
select new FullReferrer
{
Customer = d.Key.TrackId,
FullRefFalseCount = d.Count(x => !x.FullRef),
FullRefTrueCount = d.Count(x => !x.FullRef)
};