Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.NET] Gehannes met anonymous types expliciet maken

Pagina: 1
Acties:

  • Jeroen
  • Registratie: Juli 2005
  • Laatst online: 20-11 18:26

Jeroen

uǝʌ ǝp uɐʌ

Topicstarter
Het probleem is het volgende:

Mijn variabele "query2" moet het type DbQuery(Of x) hebben, waarbij x iets moet zijn. Is dat niet zo dan gaat VS in build-time zeuren dat latere operaties op "query2" niet kunnen, omdat die methodes niet bestaan voor 'geen type'. Dat krijg ik niet verholpen.

Echter, ik kan het niet helemaal expliciet maken, want ik ga met Linq nog Joinen en dan wordt het resultaat een DbQuery(Of anonymous type). Ik hoop dus dat ik voor x 'Object' kan gebruiken, maar helaas lijkt hij ook anonymous types niet naar Object te kunnen casten.

Dit is dus de code:
code:
1
2
3
4
5
6
Dim query2 As Infrastructure.DbQuery(Of Object) = query1.Join(
  db.ActivityResources,
  Function(act) act.ID,
  Function(res) res.Activity.ID,
  Function(act, res) New With {act, res}
)


En dan is dit de foutmelding:
code:
1
2
3
4
Unable to cast object of type
'System.Data.Entity.Infrastructure.DbQuery`1[VB$AnonymousType_6`2[Activity,ActivityResource]]' 
to type 
'System.Data.Entity.Infrastructure.DbQuery`1[System.Object]'.


Is er een andere manier om dit te doen? Kan ik het nog explicieter maken in de Join zodat ik er gewoon een echt type aan kan hangen?

Edit: Ik gok dat dit de belangrijkste regel is:

code:
1
  Function(act, res) New Object With {.Activity = act, .Resource = res}


Als ik dat overigens probeer dan krijg ik ongeveer dit probleem: MSDN: Object initializer syntax cannot be used to initialize an instance of type 'Object'

[ Voor 14% gewijzigd door Jeroen op 28-05-2014 16:28 ]

"I don't always test my code, but when I do, I test on production."


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Heb je hier wat aan (geen type opgeven bij Dim):
http://stackoverflow.com/...nt-to-c-sharp-var-keyword

Anders kan je altijd nog je anonieme objecten de deur wijzen en normale objecten gebruiken. Ik denk dat het dan zoiets wordt (betere naam mag je zelf verzinnen):
Visual Basic .NET:
1
Function(act, res) New AnObjectWithFieldsActivityAndResource With {.Activity = act, .Resource = res}

  • Jeroen
  • Registratie: Juli 2005
  • Laatst online: 20-11 18:26

Jeroen

uǝʌ ǝp uɐʌ

Topicstarter
Ik realiseer me net dat we Dynamic LINQ gebruiken, dat het dus niet zo vanzelfsprekend is dat dat werkt op een anonymous type en dat lijkt het probleem te zijn. Ik denk dus inderdaad dat ik het laatste ongeveer moet gebruiken.

"I don't always test my code, but when I do, I test on production."