【问题标题】:How to filter LINQ query by table column and get count如何按表列过滤 LINQ 查询并获取计数
【发布时间】:2014-12-09 11:26:43
【问题描述】:

我正在尝试根据他们的状态获取学生列表,按他们的大学分组。

所以我有三个表,学生和学院。每个学生记录都有一个状态,可以是“Prospect”、“Accepted”或“WebApp”。我需要做的是根据所选状态获取学生列表,然后显示学院的名称,以及进入该学院并将其状态设置为传入状态的学生人数。我认为这需要是一个聚合查询,因为计数来自字符串状态字段。

我不确定如何在 MS SQL 中执行此操作,因为计数来自同一个表并且它基于状态字段的值。

这是我的查询的开始,它接受搜索参数,但我不知道如何过滤状态以返回计数。

SELECT Colleges.Name, [Status], Count([Status])
FROM Students
JOIN Colleges ON Students.UniversityId = Colleges.id OR Students.+College = Colleges.Name
GROUP BY  Students.[Status], Colleges.Name
ORDER BY Colleges.Name;

接受 = 状态('接受') WebApps = 状态('WebApp') 总计 = 总和(Accpets + WebApps)

【问题讨论】:

  • 您在寻找 linq 或 SQL 解决方案吗?

标签: c# sql-server linq entity-framework


【解决方案1】:
Select 
Colleges.Name,
SUM(Case when Students.Status like 'Accepted'  then 1 else 0 end) Accepts,
SUM(Case when Students.Status like 'WebApp'  then 1 else 0 end) WebApps,
COUNT(*) Total
from Students
join Colleges on Students.UniversityId = Colleges.Id OR Students.CurrentCollege = Colleges.Name
Group by Colleges.Name

LINQ:

var results = 
(from c in db.Colleges // db is your DataContext                               
select new
{
 CollegeName = c.Name,
 AcceptedStatus = db.Students.Count(r => r.Status.ToUpper() == "ACCEPTED" && (r.UniversityId == c.Id || r.CurrentCollege == c.Name)),
 WebAppStatus = db.Students.Count(r => r.Status.ToUpper() == "WEBAPP" && (r.UniversityId== c.Id || r.CurrentCollege == c.Name)),
 Total = db.Students.Count(s => s.UniversityId == c.Id || s.CurrentCollege == c.Name)
}).ToList();

【讨论】:

  • @CarlWeis 更新了我的答案。
【解决方案2】:

试试这个http://www.linqpad.net/ 它是免费的,您可以将 linq 转换为 sql 查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多