Hey Guys,
Ik was bezig om een SQL query om te zetten naar Linq, maar bij het laatste puntje, de order by, gaat het even niet helemaal zoals het moet.
Bij de OrderByDescending gaat het nog goed, daar heeft de IDE mooi door dat x = sG en exposed hij de properties (sorting werkt door de DirectCast terug naar integer bij de Iif's), maar zodra ik dan de tweede sorteer slag wil aangeven, geeft ie niet thuis, denk hij dat x een object is, en kan ik doen wat ik wil.
Run-time exception thrown : System.ArgumentException - The argument 'value' was the wrong type. Expected 'System.Int32'. Actual 'System.Object'.
Iemand enig idee hoe ik dit met mijn Anonymous Type kan oplossen? Ik heb al een work-around, een struct defineren en die in de With vullen, maar wil toch wel graag weten waarom dit niet werkt en hoe het wel zou moeten kunnen.
Ik was bezig om een SQL query om te zetten naar Linq, maar bij het laatste puntje, de order by, gaat het even niet helemaal zoals het moet.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| Dim sG = From GMS In BIBDB.Games _ Select New With _ { _ .ID = GMS.ID, .Title = GMS.Title, _ .OrderedQuantity = _ DirectCast(IIf( _ (Aggregate O _ In BIBDB.Orders _ Where O.GameID = GMS.ID _ Into OQ = _ Sum(New Integer?(O.Quantity))).HasValue, _ (Aggregate O _ In BIBDB.Orders _ Where O.GameID = GMS.ID _ Into OQ = _ Sum(New Integer?(O.Quantity))).Value, 0), Integer), _ .ExpectedNextDelivery = _ (Aggregate O _ In BIBDB.Orders _ Where O.GameID = GMS.ID _ Into ExpND = _ Min(New DateTime?(O.ExpectedDeliveryDate))), _ .DeliveredStock = _ DirectCast(IIf((Aggregate OD _ In BIBDB.OrderDeliveries _ Join O In BIBDB.Orders On O.ID Equals OD.OrderID _ Where O.GameID = GMS.ID _ Into DS = _ Sum(New Integer?(OD.DeliveredQuantity))).HasValue, _ (Aggregate OD _ In BIBDB.OrderDeliveries _ Join O In BIBDB.Orders On O.ID Equals OD.OrderID _ Where O.GameID = GMS.ID _ Into DS = _ Sum(New Integer?(OD.DeliveredQuantity))).Value, 0), Integer), _ .PurchasedQuantity = _ DirectCast(IIf((Aggregate IL _ In BIBDB.InvoiceLines _ Join I In BIBDB.Invoices On I.ID Equals IL.InvoiceID _ Where I.Test = 0 _ AndAlso (I.OrderStatus > 0 Or Now() < I.OrderDate.AddMinutes(2)) _ AndAlso IL.GameID = GMS.ID _ Into PQ = _ Sum(New Integer?(IL.Quantity))).HasValue, _ (Aggregate IL _ In BIBDB.InvoiceLines _ Join I In BIBDB.Invoices On I.ID Equals IL.InvoiceID _ Where I.Test = 0 _ AndAlso (I.OrderStatus > 0 Or Now() < I.OrderDate.AddMinutes(2)) _ AndAlso IL.GameID = GMS.ID _ Into PQ = _ Sum(IL.Quantity)), 0), Integer), _ .RemainingStock = _ DirectCast((Aggregate OD _ In BIBDB.OrderDeliveries _ Join O In BIBDB.Orders On O.ID Equals OD.OrderID _ Where O.GameID = GMS.ID _ Into DS = _ Sum(New Integer?(OD.DeliveredQuantity))) _ - _ IIf((Aggregate IL _ In BIBDB.InvoiceLines _ Join I In BIBDB.Invoices On I.ID Equals IL.InvoiceID _ Where I.Test = 0 _ AndAlso (I.OrderStatus > 0 Or Now() < I.OrderDate.AddMinutes(2)) _ AndAlso IL.GameID = GMS.ID _ Into PQ = _ Sum(New Integer?(IL.Quantity))).HasValue, _ (Aggregate IL _ In BIBDB.InvoiceLines _ Join I In BIBDB.Invoices On I.ID Equals IL.InvoiceID _ Where I.Test = 0 _ AndAlso (I.OrderStatus > 0 Or Now() < I.OrderDate.AddMinutes(2)) _ AndAlso IL.GameID = GMS.ID _ Into PQ = _ Sum(IL.Quantity)), 0), Integer) _ } sG = (sG.OrderByDescending(Function(x) x.PurchasedQuantity)).ThenByDescending(Function(x) x.RemainingStock) |
Bij de OrderByDescending gaat het nog goed, daar heeft de IDE mooi door dat x = sG en exposed hij de properties (sorting werkt door de DirectCast terug naar integer bij de Iif's), maar zodra ik dan de tweede sorteer slag wil aangeven, geeft ie niet thuis, denk hij dat x een object is, en kan ik doen wat ik wil.
Run-time exception thrown : System.ArgumentException - The argument 'value' was the wrong type. Expected 'System.Int32'. Actual 'System.Object'.
Iemand enig idee hoe ik dit met mijn Anonymous Type kan oplossen? Ik heb al een work-around, een struct defineren en die in de With vullen, maar wil toch wel graag weten waarom dit niet werkt en hoe het wel zou moeten kunnen.