Autor Beitrag
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 16.11.10 08:19 
Hallo liebe Community,

bin da gestern auf ein Problem gestossen, bei dem ich nicht so richtig weiterkomme.
Also, ich habe eine Klasse Entity1 (ist vom Entity Framework generiert). Dazu habe ich eine partielle Klasse Entity1, die das Interface IEntity implementiert. IEntity definiert im Moment nur, welche Properties in der Entität enthalten sein müssen. Um nun die Datensätze, die von der Datenbank geladen werden, filtern zu können, wollte ich folgende Prozedur implementieren:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
public IEnumerable<IEntity> GetFilteredList(Expression<Func<IEntity, bool>> filter)
{
  foreach (IEntity item in context.Entity1.Where(filter))
    yield return item;
}
Problem ist aber, dass in der foreach als filter eine Expression<Func<Entity1, bool>> erwartet wird.
Ich schaffe es nichtmal mit einem Cast:
ausblenden C#-Quelltext
1:
2:
foreach (IEntity item in ent.Entity1.Cast<IEntity>().AsQueryable().Where(filter))
  yield return item;
Da bekomme ich dann folgende Exception:
ausblenden Quelltext
1:
'LINQ to Entities' unterstützt nur die Umwandlung primitiver Entity Data Model-Typen.					
Wie schaffe ich es nun, die Expression zu verwenden? Bzw. wie kann ich diese zu einer Expression<Func<Entity1, bool>> konvertieren? Wäre für jede Hilfe dankbar!

LG, Marko
Trashkid2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 16.11.10 08:46 
Okay, habe es eben selber geschafft, die Expression zu konvertieren.
Das Ganze sieht dann som aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
public IEnumerable<IEntity> GetFilteredList(Expression<Func<IEntity, bool>> filter)
{
  var convertedFilter = Expression.Lambda<Func<Entity1, bool>>(filter.Body, filter.Parameters).Compile();  
  foreach (IEntity item in context.Entity1.Where(convertedFilter))
    yield return item;
}


Marko