Ho circa 250.000 record contrassegnati come Boss, ogni Boss ha da 2 a 10 dipendenti. Ogni giorno ho bisogno di ottenere i dettagli dello Staff. Circa ci sono 1.000.000 di personale. Sto usando Linq per ottenere l'elenco Unico di Staff che viene lavorato quotidianamente. Si consideri il seguente C# LINQ e ModelleCome usare Efficiently Where Clausola o Seleziona in LINQ Parallel in Large Dataset
void Main()
{
List<Boss> BossList = new List<Boss>()
{
new Boss()
{
EmpID = 101,
Name = "Harry",
Department = "Development",
Gender = "Male",
Employees = new List<Person>()
{
new Person() {EmpID = 102, Name = "Peter", Department = "Development",Gender = "Male"},
new Person() {EmpID = 103, Name = "Emma Watson", Department = "Development",Gender = "Female"},
}
},
new Boss()
{
EmpID = 104,
Name = "Raj",
Department = "Development",
Gender = "Male",
Employees = new List<Person>()
{
new Person() {EmpID = 105, Name = "Kaliya", Department = "Development",Gender = "Male"},
new Person() {EmpID = 103, Name = "Emma Watson", Department = "Development",Gender = "Female"},
}
},
..... ~ 250,000 Records ......
};
List<Person> staffList = BossList
.SelectMany(x =>
new[] { new Person { Name = x.Name, Department = x.Department, Gender = x.Gender, EmpID = x.EmpID } }
.Concat(x.Employees))
.GroupBy(x => x.EmpID) //Group by employee ID
.Select(g => g.First()) //And select a single instance for each unique employee
.ToList();
}
public class Person
{
public int EmpID { get; set; }
public string Name { get; set; }
public string Department { get; set; }
public string Gender { get; set; }
}
public class Boss
{
public int EmpID { get; set; }
public string Name { get; set; }
public string Department { get; set; }
public string Gender { get; set; }
public List<Person> Employees { get; set; }
}
Nel LINQ sopra sto ottenendo l'elenco dei dipendenti distinti o il personale, l'elenco contiene più di 1.000.000 di record. Dalla lista ottenuta ho bisogno di cercare "Raj"
staffList.Where(m => m.Name.ToLowerInvariant().Contains("Raj".ToLowerInvariant()));
Per questa operazione, ci sono voluti più di 3 a 5 minuti per ottenere il risultato.
Come potrei renderlo più efficiente. Gentilmente assistermi ...
Qual è l'obiettivo qui? Perché hai bisogno di ottenere tanti record per trovare 'raj'? –
Nel mio vero progetto ci sono così tante proprietà che ci sono in Person Model, ad esempio LedgerAccounts, NoOfDaysPresent, ecc., Se Raj si avvicina e chiede la presenza, ora ho bisogno di recuperare il record di Raj ... –
Ok. Quindi "Raj" è il capo? e stai cercando di ottenere la partecipazione dei suoi subordinati? –