2015-01-31 16 views
7

Ho due istruzioni select in LINQ con un Union.Come assegnare una proprietà int nullo in un tipo anonimo in LINQ con un'unione?

A RoleID deve avere un valore nullo in una delle selezioni. Sto ottenendo l'errore qui sotto.

Se il valore RoleID ha un valore, funziona correttamente. Report è un'entità EF con proprietà.

Può essere qualsiasi cosa in questo esempio. L'esempio è semplice a scopo illustrativo.

Codice in LINQPad:

var list = Reports.Select(r => new 
    { 
     RoleID = 3 
    }) 
    .Union(Reports.Select(r => new 
    { 
     RoleID = new Nullable<int>() <= error 
     //RoleID = (int?) null   <= error 
     //RoleID = 4     <= works 
    })); 
list.Dump(); 

Come faccio a farlo funzionare con un valore nullo e fare ID ruolo di tipo int?

messaggio di errore:

'System.Linq.IQueryable' non contiene una definizione per 'Unione' e la migliore overload metodo di estensione 'System.Linq.ParallelEnumerable.Union (System.Linq. ParallelQuery, System.Collections.Generic.IEnumerable)' ha alcuni argomenti non validi argomento grado: non si può convertire da 'System.Linq.IQueryable' a 'System.Linq.ParallelQuery'

risposta

11

La prima query Select restituisce la sequenza di oggetti anonimi dove RoleID ha tipo int. Per unire entrambe le sequenze dovrebbero avere lo stesso tipo di oggetti anonimi. Quindi è necessario cambiare prima query:

var list = Reports.Select(r => new 
       { 
        RoleID = (int?)3 
       }) 

tenere a mente, in seconda query si dovrebbe anche avere annullabile RoleID per abbinare tipo di oggetto anonimo:

.Union(Reports.Select(r => new 
    { 
     RoleID = new Nullable<int>() 
     //RoleID = (int?)null 
     //RoleID = (int?)4 
    })); 

BTW Perché hanno unione su due sceglie tra stessa fonte? Sembra che tu abbia semplificato le tue query di esempio.

6

Devi RoleID essere annullabile in i primi anonimi clas s così:

Reports.Select(r => new 
       { 
        RoleID = (int?)3 
       } 

Vedi anche queste domande:

+0

Qualche commento sul downvote? L'OP ha indicato che 'RoleID = 4' lavora per loro ... – Kobi

+0

Non è il mio downvote, ma non hai cambiato risposta? Sembra che tu abbia inizialmente modificato la parte 'Union' della query –

+0

Ho bisogno che RoleID abbia un valore in uno dei selects.Proprio come in SQL, dove è possibile assegnare un valore nullo a un valore selezionato e in un'altra unione selezionare è possibile selezionare una colonna effettiva nella stessa posizione. Concat non fa differenza. Dà lo stesso errore. –

Problemi correlati