I\'m writing a Function that pulls Records from a DataBase using LINQ to get an IQueryable. This LINQ statement will pull all of the records for Active users within a certai
The problem is you are pulling back fields that will make each row distinct. Like sgriffinusa said, only pull back the 3 values you are displaying.
try and write an IEqualityComparer<T>
for the object type being selected and use it in your Distinct
method
If you limit the objects you are returning to only the fields that you want to display, it will work properly.
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;
}
Making some assumptions around the names of the various fields in the objects:
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 new { FirstName = c.DataSystem_Employees.FName, LastName = c.DataSystem_Employees.LName, ID = c.DataSystem_Employees.ID }).Distinct();
return Employees;
}
To follow the MVC pattern you might want to lift this query into your Model and return a specific class that contains those fields.
Use the Distinct() method to do this. Eg:
var query = from Notification in db.Notifications
select Notification.client ;
query=query.Distinct();
The resulting query will only contain distinct values.
Simplest way I have found to do this with object is using the groupby then selecting the first.
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;
}
This is not tested but the general concept is there.
Edit: I remembered originally finding the answer somewhere on here. Check out this for grouping objects by a certain property. LINQ's Distinct() on a particular property