l'ajout de clauses where d'une requête linq

J'ai trouvé des exemples de la façon "dynamique" ajouter d'autres clauses where d'une requête linq, mais je ne suis pas sûr de savoir comment le faire fonctionner avec ma requête spécifique.

Voici un exemple, et voici un autre. Maintenant, voici un coup d'oeil à la requête que j'ai:

var result = (from EventLogEntry elog in el.Entries
              where (elog.InstanceId == 4107)
              orderby elog.TimeGenerated descending
              select elog).ToList();

var query = from EventLogEntry elog in el.Entries
            orderby elog.TimeGenerated descending
            select elog;

Le premier exemple montre l'codée en dur InstanceID == 4107, mais je veux être en mesure d'ajouter en plus des clauses where. Tous les exemples que j'ai vu disent de faire:

query = query.Where(el.Entries => el.Entries.Message.Contains("error"));

ou quelque chose comme ça. Mais ma requête est le réglage de la définition de "la source", comme un EventLogEntry objet, alors quand j'ai essayer et d'étendre la clause where, il ne reconnaît pas les champs que je veux faire ma où le....

Tout aider?

C'est ce que j'ai essayé d'ajouter, et intellisense ne reconnaît pas du tout ça:

if (!String.IsNullOrEmpty(sc.Message))
    query = query.Where(elog.Message.Contains(sc.Message));

Mis à jour (c'est la version de travail):

var query = from EventLogEntry elog in el.Entries select elog;

try
{
    if (!String.IsNullOrEmpty(sc.Message))
        query = query.Where(elog => elog.Message.Contains(sc.Message));

    query = query.OrderBy(elog => elog.TimeGenerated);

    var result = query.ToList();
}
catch
{
    throw;
}
  • so when I try and extend the where clause, it doesn't recognize the fields that I want to do my where on 1) Pouvez-vous montrer le code exact vous avez essayé? 2) Pouvez-vous montrer l'erreur exacte que vous avez obtenu?
  • Pouvez-vous expliquer cela plus: "Mais ma requête est le réglage de la définition de "la source", comme un EventLogEntry objet" Afficher ce que tu veux dire(pseudo-code peut aider à clarifier vos besoins).
  • découvrez le premier "var resultat = (à partir de EventLogEntry elog en el.Les entrées ......)
  • Tout d'abord, il convient de el => el.Entries.Message.Contains("error"). Vous avez el.Entries sur la gauche de =>. Deuxièmement, si vous voulez le message, ne elog => elog.Message.Contains("error").
  • J'ai ajouté ce que j'ai essayé de le faire, il me dit "elog" n'existe pas dans le contexte actuel. Ce qui est vrai car c'est uniquement défini dans la déclaration initiale de la variable de requête. Comment "faire" reconnaître?
  • Il vaut la peine de mentionner que vous aurez envie d'appeler ToList à la fin, après que vous avez terminé la génération de la requête. Vous êtes juste fait inutile de travailler avec impatience par les évaluer à plusieurs reprises.
  • yep, j'ai la dernière ligne cela: var resultat = requête.ToList();
  • La première ligne de votre code n'a pas vraiment quoi que ce soit. Vous pouvez simplement écrire var query = el.Entries.AsEnumerable() ou IEnumerable<YourType> query = el.Entries.
  • Wow, repensant à ma propre question, un an plus tard, je ne savais vraiment pas ce que je faisais avec linq à l'époque...haha

InformationsquelleAutor ganders | 2012-08-28