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

[LINQ] Divisions in query leveren foutmelding op

Pagina: 1
Acties:

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 18-11 22:35
Hola, ik heb de volgende LINQ-to-SQL query

code:
1
Dim uren = From u In db.Urens Select Werkzaamheid = u.WerkzaamhedenSub.Werkzaamheden.Beschrijving, SubWerkzaamheid = u.WerkzaamhedenSub.Beschrijving, u.Begin, u.Einde, Tijd = DateDiff(DateInterval.Minute, CDate(u.Begin), CDate(u.Einde)), u.gebruiker_id Where gebruiker_id = Session("CurrentUser").ToString Order By Begin


Nou dat werkt prima, maar ik wil de tijd in uren hebben (maar wel achter de komma dus een getal, want een kwartier != een uur (met datediff dus)).

dus ik bedacht:
code:
1
Dim uren = From u In db.Urens Select Werkzaamheid = u.WerkzaamhedenSub.Werkzaamheden.Beschrijving, SubWerkzaamheid = u.WerkzaamhedenSub.Beschrijving, u.Begin, u.Einde, Tijd = (DateDiff(DateInterval.Minute, CDate(u.Begin), CDate(u.Einde)) / 60), u.gebruiker_id Where gebruiker_id = Session("CurrentUser").ToString Order By Begin


Het gaat om
code:
1
Tijd = (DateDiff(DateInterval.Minute, CDate(u.Begin), CDate(u.Einde)) / 60),


Hierna krijg ik deze foutmelding:
Could not translate expression 'Table(Uren).Select(u => new VB$AnonymousType_2`6(Werkzaamheid = u.WerkzaamhedenSub.Werkzaamheden.Beschrijving, SubWerkzaamheid = u.WerkzaamhedenSub.Beschrijving, Begin = u.Begin, Einde = u.Einde, Tijd = (Convert(DateDiff(Minute, Convert(u.Begin), Convert(u.Einde), Sunday, Jan1)) / 60), gebruiker_id = u.gebruiker_id))' into SQL and could not treat it as a local expression.

Kan ik geen divisions toepassen in m'n Linq query o.i.d.?

  • KoW
  • Registratie: Juli 2001
  • Laatst online: 17-08-2022

KoW

Parse parsed te veel

Misschien moet je opgeven wat het resulttype moet zijn. (met een cast oid) Nu lijkt de convert niet te snappen wat hij moet doen wanneer je een long deelt door een int?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Dit komt door het volgende:

Kennelijk kan Linq to SQL jouw DateDiff niet vertalen, wat logisch is want DateDiff is een functie die geen mapping heeft naar SQL in Linq to Sql, het is een ranzige VB only functie en die zou ik vermijden, je moet de DateTime methods gebruiken uit het framework. Je kunt het wel anders oplossen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Dim uren =  From u In db.Urens _
            Select  Werkzaamheid = u.WerkzaamhedenSub.Werkzaamheden.Beschrijving, _
                    SubWerkzaamheid = u.WerkzaamhedenSub.Beschrijving, u.Begin, _
                    u.Einde, Tijd = CalculateTime(CDate(u.Begin), CDate(u.Einde)), _
                    u.gebruiker_id 
            Where gebruiker_id = Session("CurrentUser").ToString _
            Order By Begin
            
Private Function CalcuateTime(begin As DateTime, end As DateTime) As Integer
    return (begin - end).Minutes / 60
End Function

Dit levert een local method call op en die zou hij wel moeten evalueren. Verder begrijp ik niet dat VB.NET toestaat dat de select niet het laatste statement in de query is, maar goed...

[ Voor 7% gewijzigd door EfBe op 09-02-2008 11:16 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • KoW
  • Registratie: Juli 2001
  • Laatst online: 17-08-2022

KoW

Parse parsed te veel

EfBe schreef op zaterdag 09 februari 2008 @ 11:15:
Verder begrijp ik niet dat VB.NET toestaat dat de select niet het laatste statement in de query is, maar goed...
Het geeft als enigst nadeel dat je in je code editor geen intellisense hebt wanneer je je select statement typt.
Voor de rest maakt het niets uit. Select als laatste plaatsen (C#) was voor mij als iemand die meer met SQL statements speelt ook wel even wennen.