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