나는이 코드 단편을 가지고있다.이 LINQ 조각을 코딩하는 더 좋은 방법이 있습니까?
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();
"SmsQueues"라는 새로운 인스턴스를 생성하고 값을 채우는 중이며 foreach 루프가 끝나면 변경 사항을 제출한다. .NET 3.5가 가지고있는 새로운 lambda/linq/anonymous 유형을 감안할 때, 위의 목적을 달성하기위한 "현대적인"방법이 있습니까?
부차적 인 질문으로, 아마도 관련, linq 식의 선택 부분에 다른 열로 구성된 기존 형식을 반환 할 수 있습니까?
T1 == T1.Id, T1.Name
T2 == T2.Id, T2.Phone
T3 == T3.Name, T3 .Phone, T3.SomethingElse
다음을 반환하는 LINQ 쿼리를 수행 할 수 있습니까?
T1.Name, T2.Phone, SomethingElseNew
그리고 .NET에 유형 T3임을 알리십시오. 그것의 새로운 인스턴스)? 그런 식으로 SubmitChanges를 할 때 새로운 T3 인스턴스가 DB에 삽입됩니까?
내가 나 자신을 분명히하는지 나는 모른다 : S
당신을 아마도 Add() 대신 AddRange()를 사용해야 할 것입니다. – tvanfosson
새로운 새로운 SmsQueue 선택은 오타입니까? 당신은 의미 : 새로운 SmsQueue 선택? 각 항목 뒤에 오는 세미콜론은 쉼표 여야합니다. "sq"가 없기 때문에 currentCustomer.SmsQueues.Add (또는 AddRange)를 사용할 수 없습니다. 거기에 무엇을 추가해야합니까? :( –
찾았습니다. 사용하려면 : currentCustomer.SmsQueues.Add (sqrange); (그것은 분명하지만 여전히 ...);) Add 대신 AddRange를 사용하고 ";" 각 진술 후 쉼표 용. 또한 선택 항목에 두 번 "새로운"것이 있습니다. 그러나 효과가있었습니다. 감사!!! –