使用LINQ返回一个独特的IQueryable?

Lan*_*ndo 14 c# linq distinct

我正在编写一个函数,它使用LINQ从DataBase中获取记录以获得IQueryable.此LINQ语句将在特定时间段内为活动用户提取所有记录,然后将UserID,First Name和Last Name吐出到Telerik RadGrid.

我的问题在于在拉动此数据时尝试在UserID上获得一个独特的值.我尝试重新编写此代码以获取结果.以下是拉动所有数据的代码示例,其中Distinct NOT工作.

public static IQueryable GetActiveEmployees_Grid(string Period)
{
    DataContext Data = new DataContext();
    var Employees = (from c in DataSystem_Records
                     where c.Period == Period
                     orderby c.DataSystem_Employees.LName
                     select c).Distinct();

    return Employees;
}
Run Code Online (Sandbox Code Playgroud)

将DataSource应用到我的网格后,这将返回用户4次,该句点的每个记录一个实例.

替代文字

有没有办法将Distinct应用于我的LINQ函数以使其按照我打算的方式工作?

Gag*_*age 24

我发现用对象执行此操作的最简单方法是使用groupby然后选择第一个.

public static IQueryable GetActiveEmployees_Grid(string Period)
{
    DataContext Data = new DataContext();
    var Employees = (from c in DataSystem_Records
                     where c.Period == Period
                     orderby c.DataSystem_Employees.LName
                     select c).GroupBy(g=>g.DataSystem_Employees.AccID).Select(x=>x.FirstOrDefault());

    return Employees;
}
Run Code Online (Sandbox Code Playgroud)

这没有经过测试,但一般的概念就在那里.

编辑:我记得最初在这里找到答案的地方.看看这个用于按特定属性对对象进行分组. LINQ对特定属性的Distinct()

  • GroupBy 工作完美!我最初在故障排除时尝试了 GroupBy,但我错过了 .Select(x => x.FirstOrDefault())。谢谢! (2认同)

sgr*_*usa 6

如果将要返回的对象限制为仅显示要显示的字段,则它将正常工作.

public static IQueryable GetActiveEmployees_Grid(string Period)
{
    DataContext Data = new DataContext();
    var Employees = (from c in DataSystem_Records
                     where c.Period == Period
                     orderby c.DataSystem_Employees.LName
                     select c.DataSystem_Employees.FName, 
                            c.DataSystem_Employees.LName, 
                            c.ID).Distinct();

    return Employees;
}
Run Code Online (Sandbox Code Playgroud)