2011-06-14 2 views
2

Donné ce dans mon datacontext:traduction non pris en charge pour SQL

public class EventsForUserID 
{ 
    public string eventName { get; set; } 
    public int eventID { get; set; } 
    public string eventIdentifier { get; set; } 
    public DateTime eventOpenDate { get; set; } 
    public DateTime eventCloseDate { get; set; } 
    public bool eventDisabled { get; set; } 
    public EventsForUserID() {} 
    public EventsForUserID(string pEventName, int pEventID, string pEventIdentifier, DateTime pEventOpenDate, DateTime pEventCloseDate, bool pEventDisabled) 
    { 
     this.eventName = pEventName; 
     this.eventID = pEventID; 
     this.eventIdentifier = pEventIdentifier; 
     this.eventOpenDate = pEventOpenDate; 
     this.eventCloseDate = pEventCloseDate; 
     this.eventDisabled = pEventDisabled; 
    } 
} 
public List<EventsForUserID> GetEventsForUserID(string userID, bool excludeDisabled) 
{ 
    var e = 
     from ex in this.Exhibitors 
      join ev in this.Events on ex.EventID equals ev.EventID 
      where ex.UserID.ToString() == userID 
      select new EventsForUserID (
       ev.EventName, 
       ev.EventID, 
       ev.EventID + "[::]" + ex.ExhibitorID + "[::]" + ex.AccountDisabled + "[::]" + ev.EventDisabled, 
       ev.OpenDate.Value, 
       ev.CloseDate.Value, 
       ev.EventDisabled 
      ); 
    if (excludeDisabled) { 
     e = from ev in e 
      where ev.eventDisabled != true 
      select ev; 
    } 
    return e.ToList(); 
} 

Je reçois l'erreur: Le membre 'LeadsDataContext + EventsForUserID.eventDisabled' a pas de traduction pris en charge à SQL.

sur la ligne return.ToList().

J'ai essayé toutes sortes .... AsQueryable() etc

je figure parce EventsForUserID est pas une vraie table SQL, mais je pensais que LINQ était pour effectuer des requêtes sur de nombreux types d'objet.

Ai-je manqué une distribution quelconque?

Un grand merci, N

Répondre

3

Malheureusement vous ne pouvez pas mélanger LINQ à des objets et LINQ to SQL librement dans la même requête. Si vous exécutez la requête en tant que requête linq-to-sql, tout doit être traduit en SQL.

Essayez de diviser votre code en deux requêtes. Le premier devrait récupérer les données pertinentes de la base de données en utilisant linq-to-sql. La seconde utilise linq-to-objects pour effectuer le filtrage/la manipulation finale des données.

+0

Merci pour le pointeur. Ceci l'a corrigé: if (excludeDisabled) { var etemp = de ev dans e.ToList() où ev.eventDisabled! = True select ev; e = etemp.AsQueryable(); } – ninety

Questions connexes