C# 基于sql server中的两个字段进行区分:.NET

C# 基于sql server中的两个字段进行区分:.NET,c#,sql-server,asp.net-mvc,group-by,distinct,C#,Sql Server,Asp.net Mvc,Group By,Distinct,我试图根据这两个字段获取表中唯一的记录。表结构为: 我在下面的查询中遇到的问题 var dept = db.Departments.Where(x => x.LeadBy == SessionManager.CurrentUser.EmployeeId).FirstOrDefault(); var teams = db.Teams.Where(x => x.DeptID == dept.DepartmentId); List<Employee> refinedEmp

我试图根据这两个字段获取表中唯一的记录。表结构为:

我在下面的查询中遇到的问题

var dept = db.Departments.Where(x => x.LeadBy == SessionManager.CurrentUser.EmployeeId).FirstOrDefault();

var teams = db.Teams.Where(x => x.DeptID == dept.DepartmentId);

List<Employee> refinedEmpList = new List<Employee>();
var empList = db.Employees.ToList();
foreach (var v in teams)
{
    foreach (var c in empList)
    {
        if (v.TeamID == c.TeamId)
        {
            refinedEmpList.Add(c);
        }
    }
}

var CronRep = db.CronReports.ToList();
List<CronReport> EmpList = new List<CronReport>();
foreach (var v in refinedEmpList)
{
    foreach (var c in CronRep)
    {
        if (v.EmployeeId == c.EmpID)
        {
            EmpList.Add(c);
        }
    }
}

return View(EmpList.Where(x => x.Status != "Present" && x.Status != "Absent" && x.Fine != 0).ToList());
但正如预期的那样,这只显示了如下独特的员工


^这显然是不正确的,因为我希望所有员工都有不同的日期时间,但没有重复记录。

您可以在将来使用此扩展方法

.GroupBy(x => new { x.Field1, x.Field2} ).Select(x => x.First()).ToList());
   public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source,
                Func<TSource, TKey> keySelector)
            {
                var seenKeys = new HashSet<TKey>();
                foreach (var element in source)
                    if (seenKeys.Add(keySelector(element)))
                        yield return element;
            }

你期望的结果是什么?不清楚您要定义为不同的属性查看GroupBy了吗?@StephenMuecke预期结果与dup条目中显示的图片相同,只是它不应具有图片中显示的两次条目(注意记录前的黑线,完全相同的记录显示两次)@d219我在上面的查询中尝试过它。但这不是我想要的@StephenMuecke换句话说,一个员工的一条记录有一个datetime(一个员工没有多个datetime)
   public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source,
                Func<TSource, TKey> keySelector)
            {
                var seenKeys = new HashSet<TKey>();
                foreach (var element in source)
                    if (seenKeys.Add(keySelector(element)))
                        yield return element;
            }
collection.DistinctBy(x => new {x.Field1, x.Field2}).ToList();