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);
我可以在日期时间后再次过滤吗?
这样的事情:
var Today = testingAll.Where( /*x => x.Call >= DateTime.Now.AddDays(-2)*/)
答案 0 :(得分:1)
我想你想要像
这样的东西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
这应该会给你一个集合,然后你可以多次查询。
答案 1 :(得分:0)
简短的回答是,你不能这样做。想一想这个问题,这个问题实际上与我给你一个班级中孩子的平均年龄相同,然后你拿这个数字并试图计算出男孩的平均年龄 - 这是不可能的没有源数据。
现在你可以通过构建表达式并在那里花费大量精力来做,但它仍然需要重新查询数据库。
如果你真的想稍微抽象一下,那么你可以创建一个将where谓词作为参数的函数:
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.Call <= DateTime.Now);
var moreCalls = GetFilteredCalls(c => c.Call >= DateTime.Now.AddDays(-2)
&& c.Call <= DateTime.Now);