我有一个IQueriable<EntityA>
类型的对象objA,我想使用lambda表示法在c#中进行查询,按两个参数(Status和WeekOfYear)进行分组,并计算EntityA类型中每个实体的出现次数。 objA。我希望结果集的计数为0.
IQueriable<EntityA> objA= ...
var group = objA.GroupBy(a => new { a.Status, a.WeekOfYear })
.Select(a => new { a.Key.Status, a.Key.Week, Count = a.Count() });
上面的代码是我从我想要的最接近的代码。它返回IQueriable<int, int, int>
,我可以轻松地将其插入到我的excel表中。但是当计数为0时,我在结果集中没有进入,然后填写Excel表格变得棘手。是否有可能获得我需要的结果,或者我是否真的需要检查所有对(这么不优雅!!!)?
答案 0 :(得分:0)
如果您使用Distinct()
功能,
您可以获取所有状态和所有WeekOfYear并检查每个元组的计数。
代码就像这样,你可以在fiddle
中获得一个有效的演示using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
IQueryable<Entity> data = (new List<Entity>() {
new Entity { Status = "1", Week = "a"},
new Entity { Status = "2", Week = "c"},
new Entity { Status = "3", Week = "b"},
new Entity { Status = "1", Week = "a"},
new Entity { Status = "1", Week = "a"}
}) .AsQueryable();;
var result = new List<EntityResult>();
var statuses = data.Select(a => a.Status).Distinct().ToList();
var weeks = data.Select(a => a.Week).Distinct().ToList();
statuses.ForEach(s => {
weeks.ForEach( w => {
int count = data.Where(a => a.Status == s && a.Week == w).Count();
result.Add(new EntityResult { Status = s, Week = s, Count= count});
});
});
Console.WriteLine(result[0].Count);
}
}
public class Entity
{
public string Status;
public string Week;
}
public class EntityResult
{
public string Status;
public string Week;
public int Count;
}