C# 按linq查询筛选组
我想你想要像这样的东西C# 按linq查询筛选组,c#,asp.net,linq,C#,Asp.net,Linq,我想你想要像这样的东西 var Today = testingAll.Where( /*x => x.Call >= DateTime.Now.AddDays(-2)*/) var testingAll=(来自metaData.AcTable中的ac 其中ac.Call>=DateTime.Now.AddMonths(-2)&&ac.Call简单的回答是你不能这么做。这样想,问题实际上与我给你一个班级中孩子的平均年龄,然后你取这个数字,并试图计算出男孩的平均年龄是一样的——没有原
var Today = testingAll.Where( /*x => x.Call >= DateTime.Now.AddDays(-2)*/)
var testingAll=(来自metaData.AcTable中的ac
其中ac.Call>=DateTime.Now.AddMonths(-2)&&ac.Call简单的回答是你不能这么做。这样想,问题实际上与我给你一个班级中孩子的平均年龄,然后你取这个数字,并试图计算出男孩的平均年龄是一样的——没有原始数据,这是不可能的
现在,您可以通过构建表达式并在那里花费大量精力来实现这一点,但它仍然需要重新查询数据库
如果您真的想稍微抽象一下,那么可以创建一个将where谓词作为参数的函数:
var testingAll = (from ac in metaData.AcTable
where ac.Call >= DateTime.Now.AddMonths(-2) && ac.Call <= DateTime.Now
group adminCall by adminCall.LanguageCode into ac
select ac
public IEnumerable GetFilteredCalls(
表达式(谓词)
{
回电
.Where(谓词)
.GroupBy(c=>c.LanguageCode)
.Select(g=>new{Lang=g.Key,Count=g.Count()})
.ToDictionary(x=>x.Lang,y=>y.Count)
.OrderByDescending(x=>x.Key);
}
你是这样使用它的:
var testingAll = (from ac in metaData.AcTable
where ac.Call >= DateTime.Now.AddMonths(-2) && ac.Call <= DateTime.Now
group adminCall by ac.LanguageCode into acc
select new { lang = acc.Key, count = acc.Count() }).ToDictionary(x => x.lang, y => y.count).OrderByDescending(x => x.Key);
public IEnumerable<KeyValuePair<string, int>> GetFilteredCalls(
Expression<Func<Call, bool>> predicate)
{
return calls
.Where(predicate)
.GroupBy(c => c.LanguageCode)
.Select(g => new { Lang = g.Key, Count = g.Count() })
.ToDictionary(x => x.Lang, y => y.Count)
.OrderByDescending(x => x.Key);
}
var calls=GetFilteredCalls(c=>c.Call>=DateTime.Now.AddMonths(-2)
&&c.呼叫c.呼叫>=DateTime.Now.AddDays(-2)
&&c.调用为什么不尝试一下呢?从我可以告诉你的情况来看,只有一个字典对象,它包含lang
和count
,因此调用值不再存在……所以答案是否定的,我不相信你可以,你只需导出键和count
,为什么不输入第一个linq
中的过滤器?我确实想要这样的东西:对Db进行常规查询,然后根据调用属性datetime对其进行多次过滤?您能给我一个简单的示例,说明如何使用Where子句过滤您的示例吗?
var calls = GetFilteredCalls(c => c.Call >= DateTime.Now.AddMonths(-2)
&& c.Call <= DateTime.Now);
var moreCalls = GetFilteredCalls(c => c.Call >= DateTime.Now.AddDays(-2)
&& c.Call <= DateTime.Now);