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;