我想要一些我的数据计数列表(计算open.closed任务的数量等),我想得到 1查询中的所有计数,所以我不确定我是什么我的linq声明如下...
_ user 是一个返回有关当前登录用户的信息的对象
_ repo 是一个对象,它返回我想要选择的表的IQueryable
var counters = (from task in _repo.All<InstructionTask>()
where task.AssignedToCompanyID == _user.CompanyID || task.CompanyID == _user.CompanyID
join instructions in _repo.GetAllMyInstructions(_user) on task.InstructionID equals
instructions.InstructionID
group new {task, instructions}
by new
{
task
}
into g
select new
{
TotalEveryone = g.Count(),
TotalMine = g.Count(),
TotalOpen = g.Count(x => x.task.IsOpen),
TotalClosed = g.Count(c => !c.task.IsOpen)
}).SingleOrDefault();
我将对象转换为单个或默认吗?我得到的例外是,此序列包含多个元素
注意:我想要整体统计数据,不是针对每项任务,而是针对所有任务 - 不确定如何实现这一目标?
答案 0 :(得分:2)
您需要将所有内容转储到一个组中,并使用常规Single
。我不确定LINQ-to-SQL是否能够正确翻译它,但它绝对值得一试。
var counters = (from task in _repo.All<InstructionTask>()
where task.AssignedToCompanyID == _user.CompanyID || task.CompanyID == _user.CompanyID
join instructions in _repo.GetAllMyInstructions(_user) on task.InstructionID == instructions.InstructionID
group task by 1 /* <<=== All tasks go into one group */ into g select new {
TotalEveryone = task.Count(),
TotalMine = task.Count(), // <<=== You probably need a condition here
TotalOpen = task.Count(x => x.task.IsOpen),
TotalClosed = task.Count(c => !c.task.IsOpen)
}).Single();
答案 1 :(得分:0)
来自MSDN
返回序列的唯一元素,如果是,则返回默认值 序列是空的;如果有更多,此方法会抛出异常 比序列中的一个元素。
您需要使用FirstOrDefault
。 SingleOrDefault is
专为包含1个元素(或无)的集合而设计。