Say you have a class named BannedProgram and it has a collection of DayOfWeek and a string ProcessName. Now the collection of DayOfWeek is basically a way to set the days of the week it's banned. With this you want to create a collection of these BannedPrograms, each with their own names and days they are banned. Simple, I know.
Next you have a list of processes that are currently running and you want to get all the processes that match the names in the BannedPrograms list AND if the current day is a banned day.
First you need the day checked function:
private static Func<DayOfWeek, Boolean> dayIsToday =
currentDay => currentDay == DateTime.Now.DayOfWeek;
Then you need the method to get the banned processes that are currently running:
private static Process[] GetBannedProcesses(BannedProgram[] programs, Process[] processes)
{
var processList = from process in processes
where
(
from program in programs
where program.DaysBanned.Any(dayIsToday)
select program.ProcessName
).Contains(process.ProcessName)
select process;
return processList.ToArray();
}
What this is doing:
Well if you look at this:
from program in programs
where program.DaysBanned.Any(dayIsToday)
select program.ProcessName
This is going to grab any BannedProgram that has a DayOfWeek that matches today and it will select only it's name. This will give you a list of names of the BannedProcesses that can not be played today.
var processList = from process in processes
where
(
from program in programs
where program.DaysBanned.Any(dayIsToday)
select program.ProcessName
).Contains(process.ProcessName)
This checks to see if any of the currently running processes have a name that matches a name in the banned program list.
And now you have a list of processes to kill. Yay. Not sure this is a big deal, just thought it was a fun example of using linq and subselects.
USING???
using System;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Windows.Forms;
No comments:
Post a Comment