加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在IQueryable上应用多个组函数

发布时间:2020-12-15 22:02:37 所属栏目:百科 来源:网络整理
导读:给出以下简单对象 public class Foo { public int PrimaryKey; public int ForeignKey; public bool FlagOne; public bool FlagTwo;} 假设我收到了IQueryable Foo.通常,如果我想对每个标志执行计数操作,我会这样做: IQueryableFoo foos = GetFoos();var tot
给出以下简单对象

public class Foo {
    public int PrimaryKey;
    public int ForeignKey;
    public bool FlagOne;
    public bool FlagTwo;
}

假设我收到了IQueryable< Foo>.通常,如果我想对每个标志执行计数操作,我会这样做:

IQueryable<Foo> foos = GetFoos();
var total = foos.Count();
var flagOneTotal = foos.Count(p => p.FlagOne);
var flagTwoTotal = foos.Count(p => p.FlagTwo);

在EF中,上面将在数据库中执行3个查询.我想在一个查询中检索所有这些.

对于分组,我可以这样做来执行单个查询:

var q = from foo in foos
        group foo by foo.ForeignKey into g
        select new {
           ForeignKey = g.Key,Total = g.Count(),FlagOneTotal = g.Count(p => p.FlagOne),FlagTwoTotal = g.Count(p => p.FlagTwo)
        };

var list = q.ToList();

但是,如果我想获取所有元素的总数而不管单个查询和单个匿名对象中的外键,我将如何做同样的事情?

换句话说,我怎么告诉.net,f??oos中的所有元素都需要被认为是1组,所以我可以对它们进行Count操作.

解决方法

这应该做的工作:

var q = from foo in foos
        group foo by 1 into g
        select new {
           Total = g.Count(),FlagTwoTotal = g.Count(p => p.FlagTwo)
        };

var list = q.ToList();

干杯

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读