2016-10-24 2 views
1

ich eine Liste der Felder haben:Linq to SQL, wie zu tun „wo [Spalte] in (Werteliste)“

var Fields_Of_User = (from item in db.Field_Relationship 
            where item.User_ID == ID_Of_User 
            select item.Field_ID 
            ).ToList(); 

I Anfrage von Liste Felder

 var Questions = (from item in db.Questions 

            where Fields_Of_User.Any(fieldid => fieldid.Equals(item.Field_ID)) 
            select item 
          ); 

auswählen möchten und dann habe ich es in Viewbag setzen

ViewBag.Questions= Questions; 

In Ansicht, ich nenne es:

@foreach (var t in ViewBag.Questions) 
{} 

habe ich den Fehler:

Unable to cast the type 'System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.

Das Problem in:

where Fields_Of_User.Any(fieldid => fieldid.Equals(item.Field_ID)) 

Aber ich weiß nicht, wie es zu beheben.

+0

try 'wo Fields_Of_User.Any (fieldid => fieldid.Field_ID == item.Field_ID)' –

+0

es wurde ein Fehler in fieldid.Field_ID –

Antwort

1

Das Problem ist höchstwahrscheinlich, dass die erste Abfrage eine Liste der nullbaren int s erzeugt, während die Suche eine Liste von Nicht-Nullwerten will. Da Sie nicht null sowieso passen würden, könnten Sie für Nicht-Nullwerte filtern und zu int in der ersten Abfrage Stimmen:

var Fields_Of_User = (from item in db.Field_Relationship 
    where item.User_ID == ID_Of_User && item.Field_ID != null 
    select (int)item.Field_ID 
).ToList(); 

Die zweite Abfrage neu geschrieben werden muss, wie folgt:

var Questions = (from item in db.Questions 
    where Fields_Of_User.Any(fieldid => fieldid == item.Field_ID) 
    select item 
); 
+0

Diese Anweisungen funktionieren nicht: –

+0

Diese Anweisungen funktionieren nicht: Fields_Of_User.Contains (item.Field_ID) –

+0

@ ThếHiệp Welchen Fehler bekommen Sie? – dasblinkenlight