mrDivan Ответов: 1

Как бы я сделал этот код более эффективным с помощью linq


How would I make this code more efficient using Linq


Что я уже пробовал:

 //Get all incidents
 List < DataRow > Incidents = rm.getData(Token, "incdet").Tables["Client Data"].AsEnumerable().ToList();

 //get incidents that fall between a date range
 var appointmentNoShow = from a in Incidents
                         where (Convert.ToDateTime(a["dateinc"].ToString()) >= firstDayOfMonth && Convert.ToDateTime(a["dateinc"].ToString()) <= lastDayOfMonth)
                         select a;

 //get all injuries
 List<DataRow> injuries = rm.getData(Token, "incemp").Tables["Client Data"].AsEnumerable().ToList();

 //put injuries that match incidents in date range into list
 var result = injuries.Where(p => Incidents.Any(p2 => p2["incid"].ToString() == p["incid"].ToString()));

// check if injuries have specific code add to list
 foreach (var item in result)
 {
     if (item["consqce"].ToString() == "107547" || item["consqce"].ToString() == "107548" || item["consqce"].ToString() == "107549")
     {
         IncidentRecord r = new IncidentRecord();
         r.ID = item["incid"].ToString();
         //r.Date = item["dateinc"].ToString();
         QualifyingList.Add(r);

     }

 }
 //select The incident that match the incident ids in the QualifyingList to get the dates
 var injuriesForMonth = Incidents.Where(p => QualifyingList.Any(p2 => p2.ID == p["incid"].ToString()));

F-ES Sitecore

Что вы подразумеваете под эффективностью? LINQ сделает ваш код медленнее, так что если под эффективным вы подразумеваете "быстрее", то я бы оставил его как есть.

1 Ответов

Рейтинг:
2

OriginalGriff

Linq не обязательно делает что-то более эффективным: то, что он делает, - это задерживает выполнение до тех пор, пока не понадобятся результаты, а это совсем другое дело.

Я бы посоветовал вам использовать класс Stopwatch, чтобы выяснить, где находятся узкие места в вашем коде, и посмотреть, как можно улучшить этот конкретный код. Не существует "волшебной формулы" для повышения эффективности, а если бы и была, то, конечно, не Linq - хотя Linq может выполнять ленивую оценку и пропускать итерации, ручной код часто работает быстрее, если вы точно не знаете, что делаете.


Jon McKee

Согласен! Хотя я бы отметил, что PLINQ может помочь в определенных ситуациях, если вы действительно знай, что ты делаешь.