srilekhamenon Ответов: 2

Решите проблему с помощью linq C#


i have a class
 public class CloudFileVersion
    {
        public int FileVersionID { get; set; }
        public int CloudFileID { get; set; }
        public string FileName { get; set; }
        public string DestinationPath { get; set; }
        public string FileDate { get; set; }
        public long FileSize { get; set; }
        public string CreationDate { get; set; }
        public int PlanID { get; set; }
        public string CloudFileName { get; set; }
        
    }

List<CloudFileVersion> objFileVersionlst

iam looping to find old file
int deleteDays=10;
foreach (var veritem in objFileVersionlst)
{
	DateTime dtver = DateTime.ParseExact(veritem.FileDate, "yyyyMMddhhmmss", CultureInfo.InvariantCulture);
	int ActualDays = (int)(DateTime.Now.ToUniversalTime() - dtver).TotalDays;

 if ( ActualDays >= deleteDays)
{
	//delete the file
}

}


могу ли я решить эту проблему без цикла с помощью linq

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

в настоящее время я зацикливаюсь вот так

по каждому элементу (ВАР veritem в objFileVersionlst)
{
Dtver датавремя = Датавремя.Метод parseexact(veritem.FileDate, "yyyyMMddhhmmss", CultureInfo.Языка и региона существует);
int ActualDays = (int)(DateTime. Now.ToUniversalTime () - dtver).TotalDays;

if (ActualDays >= deleteDays)
{
//удалить файл
}

}

Maciej Los

Почему вы хотите, чтобы решение Linq, делает for loop хуже, чем это?

srilekhamenon

для чистого кода

Mehdi Gholam

Если ваш текущий код работает, не меняйте его.

Maciej Los

Считаете ли вы, что решение Linq более понятно, чем стандартное для цикла? Неправильно!

2 Ответов

Рейтинг:
6

Midi_Mick

objFileVersionlst.Where(veritem=>(DateTime.Now.ToUniversalTime() - DateTime.ParseExact(veritem.FileDate, "yyyyMMddhhmmss", CultureInfo.InvariantCulture).TotalDays >= deleteDays).ForEach((veritem)=>{
// delete the file
});


Maciej Los

Правильный ответ, но вопрос все еще активен: зачем менять какой-то код на решение linq, если оно работает?

Midi_Mick

Это не мое дело - мне не нужно знать причину, по которой люди хотят (или нуждаются) что-то сделать, чтобы помочь им сделать это, если я в состоянии.

Karthik_Mahalingam

5!

Maciej Los

Я понимаю вашу точку зрения, но полностью согласен с OriginalGriff, даже если я фанат Linq.
Овации,
Мацей

Рейтинг:
13

OriginalGriff

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

Если существующий код работает, оставьте его в покое - Linq не улучшит его каким-либо существенным образом.

Кстати: хранить даты файлов и создания в виде строк - очень и очень плохая идея-храните их в виде значений DateTime, и весь ваш код станет легче работать и понимать.