C# 在IQueryable上应用多组函数<;T>;
给定以下简单对象C# 在IQueryable上应用多组函数<;T>;,c#,entity-framework,linq,iqueryable,C#,Entity Framework,Linq,Iqueryable,给定以下简单对象 公共类Foo{ 公钥; 公钥外键; 公共布尔FlagOne; 公共图书馆2号; } 假设我收到了一个IQueryable。通常,如果我想对每个标志进行计数操作,我会这样做: IQueryable foos=GetFoos(); var total=foos.Count(); var flagOneTotal=foos.Count(p=>p.FlagOne); var flagtowotal=foos.Count(p=>p.flagtowo); 在EF中,上面将在数据库中执行
公共类Foo{
公钥;
公钥外键;
公共布尔FlagOne;
公共图书馆2号;
}
假设我收到了一个IQueryable
。通常,如果我想对每个标志进行计数操作,我会这样做:
IQueryable foos=GetFoos();
var total=foos.Count();
var flagOneTotal=foos.Count(p=>p.FlagOne);
var flagtowotal=foos.Count(p=>p.flagtowo);
在EF中,上面将在数据库中执行3个查询。我想在一个查询中检索所有这些
对于分组,我可以执行以下操作以执行单个查询:
var q=来自foos中的foo
按foo.ForeignKey将foo分组为g
选择新的{
外键=g键,
总计=g.计数(),
FlagOneTotal=g.Count(p=>p.FlagOne),
FlagTwoTotal=g.Count(p=>p.FlagTwo)
};
var list=q.ToList();
但是,如果我想在一个查询和一个匿名对象中获得所有元素的总数,而不考虑外键,我该怎么做呢
换句话说,我如何告诉.net需要将
foos
中的所有元素视为一个组,以便我可以对它们进行计数操作。这应该可以完成以下工作:
var q = from foo in foos
group foo by 1 into g
select new {
Total = g.Count(),
FlagOneTotal = g.Count(p => p.FlagOne),
FlagTwoTotal = g.Count(p => p.FlagTwo)
};
var list = q.ToList();
干杯你的最终目标是避免3次点击数据库吗?@LucMorin这只是一个示例,但这不是重点。我想知道是否有办法做到这一点。
g.Key
将保留值1而不是ForeignKey
@AlaaMasoud我刚刚从查询中删除了它,正如他所说的“不管外键”,我认为它不需要它。