1
처음으로 EF4/LINQ를 사용하고 있는데 문제가 발생했습니다.foreach 루프의 개체 업데이트
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
CallOutcomeSubmission los = new CallOutcomeSubmission();
client = connectToService();
try
{
using (var context = new CallOutcomeContext())
{
// List of available actions
private static string ACTION_CALL_ATTEMPT = "Call Attempt";
DateTime oneDayAgo = DateTime.Now.AddHours(-24);
var query = from co in context.T_MMCallOutcome
join ca in context.T_Call on co.CallID equals ca.CallID
join lv in context.T_LeadVendorEmailHeader on co.LeadVendorEmailID equals lv.LeadVendorEmailID
where co.EnteredOn > oneDayAgo && co.MMLeadActionID == null
select new
{
co.CallOutcomeID,
co.CallID,
co.LeadVendorEmailID,
MMLeadID = lv.email_text,
ca.OutcomeID,
lv.FranchiseNumber,
co.MMLeadActionID,
co.LeadAction
};
// if any results found for query
if (query.Any())
{
foreach (var call in query.ToList())
{
// if the franchise exists
if (client.FranchiseExists(int.Parse(call.FranchiseNumber)))
{
switch (call.OutcomeID)
{
case 39: // Not Answered
call.LeadAction = ACTION_CALL_ATTEMPT;
break;
case 43: // Remove from Call List
break;
default: // If the OutcomeID is not identified in the case statement
break;
} // switch
}
else
{
los.eventLog.WriteEntry("CallOutcomeSubmission.OnTimedEvent: No franchise found with franchise ID " + call.FranchiseNumber);
}
// Save any changes currently on context
context.SaveChanges();
} // foreach
}
// if no results found from query write system log stating such
else
{
los.eventLog.WriteEntry("CallOutcomeSubmission.OnTimedEvent: No new entries found");
}
} // using
client.Close();
}
catch (System.TimeoutException exception)
{
los.eventLog.WriteEntry("CallOutcomeSubmission.OnTimedEvent:" + exception.ToString());
client.Abort();
}
catch (System.ServiceModel.CommunicationException exception)
{
los.eventLog.WriteEntry("CallOutcomeSubmission.OnTimedEvent:" + exception.ToString());
client.Abort();
}
}
를 내가 할당 할 때 :
call.LeadAction = ACTION_CALL_ATTEMPT;
내가
Property or indexer 'AnonymousType#2.LeadAction' cannot be assigned to -- it is read only
의 빌드 오류를 나는 다음과 같이 foreach 루프를 사용하여 LINQ 쿼리의 결과를 통해 반복하고
Google 검색을 수행하는 특정 오류에서 아무 것도 발견하지 못했고 내가 잘못하고있는 것이 확실하지 않습니다. 원래 쿼리에 조인이 포함되어 있습니까?
foreach 루프 내에서 call.LeadAction을 어떻게 할당 할 수 있습니까?
EF/LINQ에 대한 첫 입문이기 때문에 쿼리를 작성했거나 연산을 수행했는지 여부도 알고 싶습니다.
우수, 일 :
CallID
이 PK라고 가정하면, 내가 찾기를 사용하고 있습니다 - 당신은 무엇을 할 수 있는지는 데이터베이스에서
Call
를 검색하고LeadAction
그 방법을 설정합니다. EF가 엔티티로 다시 할당을 변환 할 수없는 이유는 쿼리에서 조인 때문입니다. 내 코드 예제에서 'query'라는 원래 쿼리 ("query")에 조인이 없으면 foreach 루프에서 할당이 작동합니까? – BrianKE수정 - 실제 엔터티 유형 (이 경우에는 호출)을 반환해야하는 경우. –
실제로 문제를 일으키는 조인은 아니지만 새로운 개체를 반환한다는 사실입니다. 새로운 {co.CallID, co.LeadAction}과 같은 새 객체를 반환하면 조인없이 동일한 문제가 발생합니다. 또한 당신은 당신의 새로운 선택의 새로운 {공동 MMLeadID = lv.email_text, ca.OutcomeID, ... } 내부 전체 개체를 반환하여 문제를 방지 할 수 있습니다; – sgmoore