Недавно меня спросили на asp.net форуме о том как бы я нашел старые файлы и удалил их.
Я ответил, что я бы использовал LINQ. Это прекрасное средство для такого сценария. Здесь запрос для нахождения и удаления старых файлов.
Не забудьте добавить ссылку на System.IO.
C#
var query = from o in Directory.GetFiles("/YourFolder", "*.*", SearchOption.AllDirectories) let x = new FileInfo(o) where x.CreationTime <= DateTime.Now.AddMonths(-6) select o; foreach (var item in query) { File.Delete(item); }
VB.NET
Dim query = _ From o In Directory.GetFiles("/YourFolder", "*.*", _ SearchOption.AllDirectories) _ Let x = New FileInfo(o) _ Where x.CreationTime <= DateTime.Now.AddMonths(-6) _ Select o For Each item In query File.Delete(item) Next item
Запрос находит все файлы, которые старше 6 месяцев.
Все что вам нужно, чтобы запрос работал для вас - это поменять каталог поиска на свой.
Вы также можете заменить паттерн поиска и удалять файлы по другим критериям.
Эту функциональность можно перенести в консольное приложение и запускать с помощью шедулера (менеджера отложенных задач).
Эта задача еще одна неплохая причина использовать LINQ.
В этом примере вы можете увидеть как импользовать выраженеи from-let-where в LINQ
Для этой цели, возьмем простой массив и распечатаем только те числа, которые больше 10.
static void Main(string[] args) { // code from DevCurry.com var arr = new[] { 5, 3, 4, 2, 6, 7 }; var sq = from int num in arr let square = num * num where square > 10 select new { num, square };
foreach (var a in sq) Console.WriteLine(a);
Console.ReadLine(); }
Как показано выше, from выражение специфицырует исходную коллекцию данных.
Выражение let принимает рассчитанный корень и присваивает его переменной, которая используется в where.
Выражение where обрезает те числа из массива, квадрат которых меньше 10.
Вконце концов выражение select создает объект анонимного типа, который распечатывается в консоль.
Практически все разработчики биндят свои Generic List-ы к ASP.NET контролам.
Однако если список огромен, то вам нужно реализовать постраничность.
Здесь простой пример реализации постраничности с использованием LINQ. Предполагается, что список в памяти.
Здесь написано как найти сумму значений многомерного массива с использованием LINQ. В примере массив имеет 3 строки и 2 колонки:
C#
using System; using System.Linq;
class Program { static void Main(string[] args) { try { var myArray = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 } }; var arrSum = (from int val in myArray select val) .Sum();
Friend Class Program Shared Sub Main(ByVal args() As String) Try Dim myArray = New Integer(, ) { { 1, 2 }, { 3, 4 }, { 5, 6 } } Dim arrSum = ( _ From val As Integer In myArray _ Select val).Sum()
Console.WriteLine(arrSum) Console.ReadLine() Catch ex As Exception ' handle ex End Try End Sub End Class
Здесь простой пример того, как используя LINQ вытащить только строки из нетипизированного списка (ArrayList),
который содержит строки и целые числа.
C#
static void Main(string[] args) { ArrayList al = new ArrayList { "Hello", 200, "World", false, 100 }; var onlyStr = al.OfType<string>(); Console.WriteLine("Printing Only Strings"); foreach(var str in onlyStr) Console.WriteLine(str); Console.ReadLine(); }
VB.NET
Sub Main(ByVal args() As String) Dim al As ArrayList = New ArrayList From {"Hello", 200, "Word", False, 100} Dim onlyStr = al.OfType(Of String)() Console.WriteLine("Printing Only Strings") For Each str In onlyStr Console.WriteLine(str) Next str Console.ReadLine() End Sub
Как вы можете видеть, мы использовали метод
Enumerable.OfType<TResult> .
Который отфильтровал элементы коллекции IEnumerable, основываясь на заданном типе, в нашем случае типе String.