Como: Especificar dinamicamente o predicado filtros em tempo de execução (guia de programação translation from VPE for Csharp)
Em alguns casos você não souber até o tempo de execução predicados quantas que você precisará aplicar a elementos de fonte no where cláusula. Uma maneira de especificar vários filtros predicados dinamicamente é usar o Contains método, conforme mostrado no exemplo a seguir:
Exemplo
// To run this sample, first specify some integer values for the command line.
// The numbers 111 through 122 are all valid student IDs.
// In Visual Studio or C# Express, click on Project > Properties > Debug.
// Call the method: QueryByID(args);
static void QueryByID(string[] ids)
{
var queryNames =
from student in students
let i = student.ID.ToString()
where ids.Contains(i)
select new { student.LastName, student.ID };
foreach (var name in queryNames)
{
Console.WriteLine("{0}: {1}", name.LastName, name.ID);
}
}
/*
Output (depends on args):
111 114 118
Garcia: 114
Garcia: 118
Omelchenko: 111
*/
Quando você tiver que escolher entre consultas alternativas predeterminadas, você pode usar um switch demonstrativo. No exemplo a seguir, studentQuery tem um diferente onde cláusula dependendo do nível de classificação, ou ano, é especificada na linha de comando.
// To run this sample, first specify an integer value of 1 to 4 for the command line.
// This number will be converted to a GradeLevel value that specifies which set of students
// to query. In Visual Studio or C# Express, click on Project > Properties > Debug to specify
// command line arguments.
// Call the method: QueryByYear(args[0]);
static void QueryByYear(string level)
{
GradeLevel year = (GradeLevel)Convert.ToInt32(level);
IEnumerable<Student> studentQuery = null;
switch (year)
{
case GradeLevel.FirstYear:
studentQuery = from student in students
where student.Year == GradeLevel.FirstYear
select student;
break;
case GradeLevel.SecondYear:
studentQuery = from student in students
where student.Year == GradeLevel.FirstYear
select student;
break;
case GradeLevel.ThirdYear:
studentQuery = from student in students
where student.Year == GradeLevel.FirstYear
select student;
break;
case GradeLevel.FourthYear:
studentQuery = from student in students
where student.Year == GradeLevel.FourthYear
select student;
break;
default:
break;
}
Console.WriteLine("The following students are at level {0}", year.ToString());
foreach (Student name in studentQuery)
{
Console.WriteLine("{0}: {1}", name.LastName, name.ID);
}
}
Compilando o código
Esses exemplos contêm referências a objetos que são definidos no aplicativo de exemplo em Como: consulta uma coleção de objetos (guia de programação translation from VPE for Csharp). Para compilar e executar os exemplos, cole o StudentClass classe nesse aplicativo e adicione uma telefonar para o método a partir do Main método.
Ao adaptar este método para o seu próprio aplicativo, lembre-se de que o LINQ requer a versão 3.5 do .NET Framework, e o projeto deve conter uma referência a sistema.Core.dll e o uso de uma diretriz para sistema.LINQ. O LINQ to SQL, LINQ to XML e LINQ to DataSet tipos requerem usos adicionais e referências.Para obter mais informações, consulte Como: Criar um projeto LINQ.
The Exemplo de consulta dinâmico exemplo mostra outra abordagem para construção de consulta dinâmica com o LINQ.
Consulte também
Conceitos
Expressões de consulta do LINQ (guia de programação translation from VPE for Csharp)