Autor Beitrag
ronnyp
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 18.09.12 12:52 
Hallo,
ich stehe gerade vor folgendem Problemchen. Ich versuche einen Expression Tree aufzubauen der folgendes widerspiegelt.
ausblenden C#-Quelltext
1:
m => m.property.Contains(string) || m.property.Contains(string2)					


Das Ganze soll auf eine Linq Klasse Mitarbeiter mit der Eigenschaft (string) mitarbeiter_tags angewendet werden.

Also
ausblenden C#-Quelltext
1:
m => m.mitarbeiter_tags.Contains(string) || m.mitarbeiter_tags.Contains(string2)					


Jedoch soll das ganze dynamisch auf einer List<string> funktionieren.

In etwa so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
List<string> tags = new List<string>(){"a","b""C"};

var paramEx = Expression.Parameter(typeof(Mitarbeiter), "m");

                  Expression completeEx = null;
                  foreach (var item in tags)
                  {
                      Expression partEx = Expression.Call(
                          paramEx,
                          typeof(Mitarbeiter).GetProperty("mitarbeiter_tags").GetValue(nullnull).GetType().GetMethod("Contains"),
                          Expression.Constant(item)
                      );
                      completeEx = completeEx == null ? partEx : Expression.Or(completeEx, partEx);
                  }
                  return Expression.Lambda<Func<Mitarbeiter, bool>>(completeEx, paramEx);


Ich habe jetzt schon unzählige Konstellationen probiert, komme nur leider nicht auf einen Grünen-Zweig. Irgend was ist immer Null oder der Cast schlägt fehl. Wäre über jede Hilfe dankbar, da ich schon zwei Tage an diesem Problem sitze. (Ich versteh es einfach nicht)

Danke Ronny
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 18.09.12 15:40 
Hallo Ronny :welcome:

ich denke mal unter myCSharp.de - Expression Tree or verknüpfung Contains Object.property hast du schon genug Hinweise bekommen, oder?