Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询中单个表上的多个计数_C#_Sql_Linq_Nhibernate - Fatal编程技术网

C# LINQ查询中单个表上的多个计数

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

我在LINQ查询中对单个表进行多次计数时遇到问题。我正在使用NHibernate、LINQ到NHibernate和C

查询是一个填充的列表。我有一个表,它有一个名为FullRef的布尔值。我想做一个LINQ查询,给出每个TrackId上FullRef=false和FullRef=true的发生次数。TrackId每次获得一个曲目时都会获得一个新行。Source==“UserRef”

在下面的查询中,我得到了FullRef=true的正确数字计数(来自FullRefTrueCount),但它在fullreffalsecont上给出了一个未知的错误数字

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)
    };