Ich habe dieses Code-Fragment:Gibt es eine bessere Möglichkeit, dieses LINQ-Fragment zu codieren?
SmsDataClassesDataContext dc = new SmsDataClassesDataContext();
// Get the customer
Customer currentCustomer = dc.Customers.Single(c => c.Hash1 == forThisHash);
// Get from Name (LINQ to XML)
var q = from c in thisSmsPack.Descendants("from")
select c;
string from = q.First().Value;
foreach (XElement element in thisSmsPack.Descendants("to"))
{
// Create the queue
SmsQueue sq = new SmsQueue();
sq.CustomerId = currentCustomer.CustomerId;
sq.MsgFrom = from;
sq.MsgTo = element.Attribute("name").Value;
sq.MsgPhone = element.Attribute("phone").Value;
sq.MsgBody = element.Attribute("msg").Value;
sq.Priority = currentCustomer.SendsSmsAtPriority;
sq.DontSendUntil = GetNextSendDate();
// sq.TimeCreated = System.DateTime.Now;
currentCustomer.SmsQueues.Add(sq);
}
dc.SubmitChanges();
ich neue Instanzen von „SmsQueues“ erschaffe, die Werte bevölkern, und wenn die foreach-Schleife beendet ist übermittle ich die Änderungen. Angesichts der neuen Lambda/Linq/anonymen Typen, die .NET 3.5 hat, gibt es einen "moderneren" Weg, um das oben genannte zu erreichen?
Als eine Nebenfrage, möglicherweise verwandt, kann ich einen vorhandenen Typ, der aus verschiedenen Spalten besteht, im ausgewählten Teil des linq-Ausdrucks zurückgeben?
Angenommen, Sie drei Tabellen haben:
T1 == T1.Id, T1.Name
T2 == T2.Id, T2.Phone
T3 == T3.Name, T3 .phone, T3.SomethingElse
Kann ich eine LINQ-Abfrage durchführen, die zurückgibt:
T1.Name, T2.Phone, SomethingElseNew
Und wissen .NET, dass das vom Typ T3 ist (und es ist eine neue Instanz davon)? So, wenn ich SubmitChanges, neue T3-Instanzen in der DB eingefügt werden?
Ich weiß nicht, ob ich mich klar ausgedrückt: S
Sie Wahrscheinlich muss AddRange() anstelle von Add() verwendet werden. – tvanfosson
Die neue neue SmsQueue auswählen ist ein Tippfehler? Meintest du: wähle neue SmsQueue? Die Semikolons nach jedem Element sollten Kommas sein. Auch die currentCustomer.SmsQueues.Add (sq) (oder AddRange) kann nicht verwendet werden, weil "sq" nicht existiert, was soll ich dort hinzufügen? :( –
Ich fand es. Ich brauchte zu verwenden: currentCustomer.SmsQueues.Add (sqrange); (es war offensichtlich, aber immer noch ...);) Ich habe AddRange anstelle von Hinzufügen und änderte die ";" für Kommas nach jeder Anweisung. Auch du hattest zwei mal "neu" in der Auswahl. Aber es hat funktioniert. Vielen Dank!!! –