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。
良好,即工作。需要說明的是,EF無法將作業轉換回實體的原因在於查詢中的連接?如果原始查詢(我的代碼示例中的'查詢')沒有包含任何連接,那麼foreach循環中的賦值就可以工作? – BrianKE
正確 - 如果你要返回實際的實體類型(在這種情況下調用)。 –
這不是真正的導致問題的連接,而是你正在返回一個新對象的事實。如果你返回了一個新的對象,例如new {co.CallID,co.LeadAction},那麼你會在沒有連接的情況下得到相同的問題。您可能還可以通過返回內部新的選擇新 {合作, MMLeadID = lv.email_text, ca.OutcomeID, ... }完整實體,以避免問題; – sgmoore