Concat or Union two or more entities LINQ

Hello,

i am trying to do a concat or union between two or more statements, but I am getting this error

Unable to cast object of type 'System.Data.Objects.ObjectQuery`1[VB$AnonymousType_22`2[System.Int32,System.Decimal]]' to type 'System.Collections.Generic.IEnumerable`1[VB$AnonymousType_22`2[System.Int32,System.Nullable`1[System.Decimal]]]'.


In the code below you will see how I have created three seperate linq quiries that provide me with the value based on dt1 and dt2
NOTE: dt1, dt1 are strings that have date values (i.e. start date, end date )


I would like to get the (sum) of  ArAmount between all three tables in one query.


Thank you in advance
Dim qry1 = (From tr In DataContext.TransactionMain _
                              Where tr.TransactionDate >= dt1 _
                              And tr.TransactionDate <= dt2 _
                              And tr.TransactionType = Enums.TransactionType.Completed _
                              Select New With {.arAmount = tr.Amount})


Dim qry2 = (From cm In DataContext.CustomerAccountMemo _
                           Where cm.DateIssued >= dt1 _
                           And cm.DateIssued <= dt2 _
                           Select New With {.arAmount = cm.Amount})

Dim qry3 = (From pm In DataContext.Payment _
                        Where pm.CreatedOn >= dt1 _
                        And pm.CreatedOn <= dt2 _
                        Select New With {.arAmount = pm.Amount * -1})


'Now when I try to merge them as below I get an error Unable to cast object of type 'System.Data.Objects.ObjectQuery`1

Dim qry = (From tr In DataContext.TransactionMain _
                              Where tr.TransactionDate >= dt1 _
                              And tr.TransactionDate <= dt2 _
                              And tr.TransactionType = Enums.TransactionType.Completed _
                              Select New With {.id = tr.TransactionID, .arAmount = tr.Amount}) _
                          .Concat _
                          (From cm In DataContext.CustomerAccountMemo _
                           Where cm.DateIssued >= dt1 _
                           And cm.DateIssued <= dt2 _
                           Select New With {.id = cm.AccountMemoID, .arAmount = cm.Amount}) _
                       .Concat _
                       (From pm In DataContext.Payment _
                        Where pm.CreatedOn >= dt1 _
                        And pm.CreatedOn <= dt2 _
                        Select New With {.id = pm.PaymentID, .arAmount = pm.Amount * -1})


'My ultimate result is that I will have the sum of arAmount between all three tables

Open in new window

TeknosoftAsked:
Who is Participating?
 
deadlyDevConnect With a Mentor Commented:
There is a mix of types in your query.

At least one of your query (I cannot be sure which without seeing your dbml) fields is a nullable decimal, and the other, or other two are plain decimals.

For whichever fields are not nullable, you should cast the return values to nullable, ie:

Select New With {.id = cm.AccountMemoID, .arAmount = CType(cm.Amount, System.Nullable(Of System.Decimal))}) _
0
 
TeknosoftAuthor Commented:
You have identified and directed me to the source of the problem. One entity did have the amount as nullable=false. by just changing that I was able to use the linq query.

Thanks for your help
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.