2011-01-06 5 views
0

ich eine einfache Entitätsmodell habenC# LINQ to Entities: Abrufen von benutzerdefinierten Objekte

Bank 1 --- ∞ User 1 --- ∞ Session

In Teilklasse Bank I habe zu speichern ein Objekt Uhr eingestellt während der Erstellung der Bank. Kann dieses Clock-Objekt aus einer Session-Methode abgerufen werden, und natürlich wurde kein Bank-Parameter übergeben?

Einige Code

public partial class Bank : IBank { privaten iClock _bankClock;

public IClock Clock 
    { 
     get { return _bankClock; } 
     set { _bankClock = value; } 
    } 

}

public partial class Session : ISession public bool MyMethod() { var test = (dc.Session.Include("User.Bank").Where(t => t.session_id == session_id)); var temp = test.First().User.Bank.Clock.Now(); }

wenn MyMethod Aufruf i erhalten Objektverweis auf eine Instanz eines Objekts eingestellt. und es wird auf die Clock-Eigenschaft verwiesen. Haben Sie Hinweise zum Abrufen eines benutzerdefinierten Objekts aus einer LINQ-Abfrage?

Vielen Dank, Mit freundlichen Grüßen

mehr Code // CreateBank


public IBank CreateBank(string bankName, int valuePassedInCreateMethod, Clock bankClock) {using (var dc = new Database1Entities(Functions.ToEntitiesConnectionString(connectionString))) { _dbField=valuePassedInCreateMethod; bankReturn=(from c in dc.Bank where c.bank_name == bankName select c).First(); bankReturn.Clock = bankClock; dc.SaveChanges(); return bankReturn;

  } 

}

Antwort

1

Überprüfen Objekterstellung _bankClock, haben Sie ihm einen Wert zugewiesen?

Sehen Sie, wenn ich Ihrer Anforderung nah bin. Ich bekomme das funktioniert

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     User user = new User(); 
     user.Bank = Bank.CreateBank("my bank", 23, new Clock()); 
     Session session = new Session(user, "myid"); 
     bool returned = session.MyMethod(); 
     if (returned) 
      MessageBox.Show("Got it"); 
    } 

} 

public class Bank 
{ 

    int value; 
    string bankName; 
    public Clock Clock; 

    public static Bank CreateBank(string bankName, int valuePassedInCreateMethod, Clock bankClock) 
    { 
     Bank b = new Bank(); 
     b.Clock = bankClock; 
     b.bankName = bankName; 
     b.value = valuePassedInCreateMethod; 
     return b; 
    } 
} 

public class User 
{ 
    public Bank Bank; 
    public string type = "User.Bank"; 
} 

public partial class Session 
{ 

    public static List<Session> Sessions; 
    string type; 
    string session_id; 
    User User; 

    public Session(User user, string session_id) 
    { 
     if (Sessions == null) Sessions = new List<Session>(); 
     this.User = user; 
     this.type = user.type; 
     this.session_id = session_id; 
     Sessions.Add(this); 
    } 

    static void Add(Session session) 
    { 
     Sessions.Add(session); 
    } 
    static List<Session> Include(string type) 
    { 
     return Sessions.Where(rs => rs.type == type).ToList<Session>(); 
    } 
    public bool MyMethod() 
    { 
     var test = Session.Include("User.Bank"); 
     var test1 = test.Where(t => t.session_id == session_id); 
     var temp = test1.First(); 
     var temp1 = temp.User; 
     var temp2 = temp1.Bank; 
     var temp3 = temp2.Clock; 
     var temp4 = temp3.Now(); 
     if (temp4 != DateTime.MinValue) 
      return true; 
     return false; 
    } 
} 
public class Clock 
{ 
    public DateTime Now() 
    { 
     return DateTime.Now; 
    } 
} 
+0

Ja Uhr Eigenschaft wird auf neue Bank Erstellung (CreateBank-Methode) festgelegt. Von einer Testmethode kann ich die folgende Abfrage nicht ausführen var aBank = CreateBank (Uhr) aBank.Sessions (sessionAdmin) .Where (s => s.MyMethod()). Count(); Sitzungen abrufen mit linq alle vorhandenen Sitzungen – Ettore

+0

Nicht sicher, was falsch ist. Brauchen Sie Code zum Überprüfen. – hungryMind

+0

hinzugefügt den CreateBank relevanten Code. Danke für Ihre Hilfe! – Ettore